我有类似图片的情况。


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的所有测试类。

07-24 12:35