我有类似图片的情况。
ProjB依赖于ProjA。
在src / test / java中的ProjA中,我有一些Util类用于测试目的。我也想在ProjB的测试中使用此实用程序。
public class TestB {
@Test
public void sth(){
Util u = new Util();
}
}
public class Util {
public void util(){
System.out.println("do something");
}
}
ProjA / pom.xml依赖于junit 4.11,
ProjB / pom.xml依赖于ProjA。
当我运行TestB时,有exepiton java.lang.ClassNotFoundException:aaaa.Util。
那么我可以在另一个项目中使用测试中的类吗?
最佳答案
要在ProjB中使用ProjA的测试代码,您需要做两件事:
1.)将以下行添加到ProjA / pom.xml的<build>
部分:
<pluginManagement>
<plugins>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>test-jar</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
使用此添加项,您不仅会在执行
mvn package
时获得工件ProjA-x.y.jar,而且Maven还将创建另一个工件:ProjA-x.y-tests.jar,其中包含ProjA测试代码的所有类。2.)现在,您需要将此ProjA-x.y-tests.jar工件的依赖项添加到ProjB / pom.xml中(除了已经存在的对ProjA-x.y.jar的依赖项):
<dependencies>
<!-- the dependency to the production classes of ProjA ... -->
<dependency>
<groupId>foo</groupId>
<artifactId>ProjA</artifactId>
<version>x.y</version>
<dependency>
<!-- the dependency to the test classes of ProjA ... -->
<dependency>
<groupId>foo</groupId>
<artifactId>ProjA</artifactId>
<classifier>tests</classifier>
<version>x.y</version>
<scope>test</scope>
<dependency>
</dependencies>
现在,在测试ProjB时,可在类路径中使用ProjA的所有测试类。