我是maven的新手,我在缠绕这个问题时遇到了一些麻烦。
我有一堆捆绑作为项目的集成测试。我希望能够随意将这些测试应用于任何其他项目。
如何使用POM将集成测试项目代码放入另一个项目并在集成测试阶段执行?
如果我将其作为依赖项,并且Integration测试项目的POM指定了阶段集成测试。原始项目的构建周期是否继续,直到达到集成测试,然后依赖项目在该阶段接管?
抱歉,我觉得我在这里打死马。您的回复非常有助于我了解最新情况以及我需要做些什么。 我的问题是,即使我的测试代码编译并作为依赖项添加为test,因为某些原因它不会执行或检测测试。 该测试名为appTest,上面有JUnit 4.x标签,我无法弄清楚它为什么不起作用。
答案 0 :(得分:2)
您可以在配置maven-jar-plugin并运行 mvn install 的隔离工件中发布测试:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>test-jar</goal>
</goals>
</execution>
</executions>
</plugin>
稍后从您要执行测试的其他项目中导入依赖项:
<dependency>
<groupId>project.with.tests.groupid</groupId>
<artifactId>projectwithtestsartifatid</artifactId>
<version>1.0</version>
<type>test-jar</type>
<scope>test</scope>
</dependency>
无论如何,surefire或failsafe插件只在 target / test-classes 文件夹中查找测试,而不是在类路径的jar中查找。肯定有一个open issue,没有分配固定版本(至少目前是这样)。
解决方法是使用依赖项插件来解压缩目标/测试类中的测试类,但这可能会污染发布版本:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>resource-dependencies</id>
<phase>process-test-classes</phase>
<goals>
<goal>unpack-dependencies</goal>
</goals>
<configuration>
<includeTypes>test-jar</includeTypes>
<outputDirectory>${project.build.directory}/test-classes</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
答案 1 :(得分:1)
最佳选择是将集成测试代码提取到单独的模块,然后您必须运行mvn install
将二进制文件发布到本地存储库,以便在构建另一个项目时可见,或者只需mvn compile
如果这些测试将用于模块与父模块具有相同版本的多模块项目中,则需要。
要在另一个项目或模块中使用,它应该在依赖性部分中声明,其中包含像junit library这样的测试范围。
如果上面的选项不合适,可以尝试使用测试分类器(文件名后缀)准备附加的jar:
<build>
<sourceDirectory>src/main/scala</sourceDirectory>
<testSourceDirectory>src/test/scala</testSourceDirectory>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<executions>
<execution>
<id>test-jar</id>
<goals>
<goal>test-jar</goal>
</goals>
<configuration>
<includes>
<include>com/thenewmotion/test/**/*.*</include>
</includes>
</configuration>
</execution>
</executions>
</plugin>
并且除了测试范围之外还应该添加test-jar类型或测试分类器:
<dependency>
<groupId>com.thenewmotion</groupId>
<artifactId>msp-solveconnector</artifactId>
<version>${project.version}</version>
<type>test-jar</type>
<scope>test</scope>
</dependency>