我有一个(Maven)项目B依赖于项目A.项目A将其测试打包到一个jar中,如here所述。假设我在项目A中有一个测试类com.forelight.a.FooTest
。该类在项目B中的测试范围的类路径上可见,但不会由mvn test
自动执行。我可以在项目B的test/main/java
目录中扩展FooTest,如下所示:
package com.forelight.b;
public class FooBarTest extends com.forelight.a.FooTest {}
这就完成了工作(mvn test
在命令行和日食下运行)但感觉很糟糕。
答案 0 :(得分:2)
这是一个有效的自动化解决方案:
unpack-dependencies
自动将测试源jar解压缩到目标文件夹的子文件夹(例如project-a-test-sources
)add-test-source
目标自动添加解压缩的源作为项目A中的测试源要实现它,在项目A中将以下内容添加到构建部分:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>test-jar</goal>
</goals>
</execution>
</executions>
</plugin>
这实际上会创建一个新的jar作为提供测试源的构建的一部分。请务必通过mvn install
安装。
在项目B中,将以下内容添加到依赖项中:
<dependency>
<groupId>com.sample</groupId>
<artifactId>project-a</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.sample</groupId>
<artifactId>project-a</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>test</scope>
<classifier>test-sources</classifier>
</dependency>
为了使用项目A填充类路径,第二个依赖项是无害的,它将被下面的插件执行使用。
在项目B中,还要将以下内容添加到构建部分:
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.2</version>
<executions>
<execution>
<id>unpack-test-sources</id>
<phase>generate-test-sources</phase>
<goals>
<goal>unpack-dependencies</goal>
</goals>
<configuration>
<includeGroupIds>com.sample</includeGroupIds>
<includeArtifactIds>project-a</includeArtifactIds>
<includeScope>test</includeScope>
<includeClassifiers>test-sources</includeClassifiers>
<outputDirectory>
${project.build.directory}/project-a-test-sources
</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>1.10</version>
<executions>
<execution>
<id>add-test-source</id>
<phase>generate-test-sources</phase>
<goals>
<goal>add-test-source</goal>
</goals>
<configuration>
<sources>
<source>${project.build.directory}/project-a-test-sources</source>
</sources>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
这里我们正在解压缩源并将它们添加为测试源。
然后,Maven将自动执行添加的测试。
对这种方法的几点考虑:
run-project-a-tests
并仅在需要时通过{执行它们{1}}。这也将使您的默认构建更快(更标准)。