maven-plugin-testing-harness遇到测试执行期间没有可用的连接器工厂

fhg3lkii  于 2023-10-17  发布在  Maven
关注(0)|答案(1)|浏览(80)

当使用maven-plugin-testing-harness时,在测试执行过程中遇到以下错误。在加载pom.xml文件作为测试的一部分时,测试似乎无法解析来自Maven存储库的工件。存储库的url是有效的,并且该构件存在于存储库中。
我们不能简单地将依赖项添加到项目的pom.xml文件中,因为测试正在寻找与当前版本冲突的旧版本。我们在测试pom文件中配置的插件也遇到了这种情况,这些插件使用了我们在项目pom中已经拥有的依赖项的不同版本。
[ERROR] Non-resolvable import POM: Could not transfer artifact ::pom:1.1.2 from/to repository (https://REDACTED VALID URL/): No connector factories available @ line 44, column 19 at org.apache.maven.model.building.DefaultModelProblemCollector.newModelBuildingException(DefaultModelProblemCollector.java:197) at org.apache.maven.model.building.DefaultModelBuilder.build(DefaultModelBuilder.java:568) at org.apache.maven.model.building.DefaultModelBuilder.build(DefaultModelBuilder.java:454) at org.apache.maven.model.building.DefaultModelBuilder.build(DefaultModelBuilder.java:267) at org.apache.maven.project.DefaultProjectBuilder.build(DefaultProjectBuilder.java:173) ... 47 more
然后测试失败,因为由于这个错误,Maven无法加载Maven Project类。
在线指南建议连接器库在Maven测试类路径中不可用。这似乎是有道理的,但加入他们并没有影响局势。

9o685dep

9o685dep1#

下面的解决方案更像是一种变通方法,但它使我们能够向前迈进。
我们在项目中添加了一个新模块(例如,test-primer),并将其分层到我们挑战模块之前的构建中。然后,我们将依赖项添加到该模块,这将触发下载到本地存储库,以便在测试运行时可以使用所需的Maven工件。这个间接层允许我们绕过版本冲突,这些冲突使我们无法在一开始就简单地将添加到测试模块中。
下面是一个示例(实际更改集可在GitHub上获得):
新模块test-primer添加到父pom:

<modules>
        <module>test-primer</module>
        <module>fermenter-mda</module>
    </modules>

test-primer pom触发下载所需依赖项:

<project>
    ...
    <artifactId>test-primer</artifactId>
    <name>Fermenter::Test Primer</name>
    <description>A temp module to work around test dependency issues in fermenter-maven-plugin</description>

    <!--
        NB: Currently, the maven test harness needs access to a specific version of commons-io, among other dependencies,
        but we leverage newer versions in fermenter-mda.  As such, this is an ugly workaround that ensures that the
        version is available in the .m2/repository of the local environment so that when the test runs, it
        can be resolved.  Because we are mocking the Maven plugin for testing, we cannot ignore or manually set
        these dependencies via normal means.
     -->

    <build>
        <plugins>
            <plugin>
                <groupId>org.technologybrewery.habushu</groupId>
                <artifactId>habushu-maven-plugin</artifactId>
                <version>2.4.1</version>
                <extensions>true</extensions>
            </plugin>
        </plugins>
    </build>
</project>

相关问题