测试中的NoClassDefFoundError和ClassNotFound

时间:2015-07-20 12:52:16

标签: maven junit noclassdeffounderror classnotfoundexception

你好我有这样的结构。

parent.pom
|-alpha.pom
|-beta.pom

在beta中我对alpha有依赖,在beta测试中我有一个对alpha src / test / java中的类的引用

然而,当我运行beta测试时,它似乎找不到alpha文件。

该类本身正在实现src/main/java中的文件,因此它类似于FooBarFactoryForTest implements FooBarFactory。当我在beta测试中new FooBarFactoryForTest()时,它无法找到FooBarFactoryForTest

同样的结构也适用于alpha中的测试。

有任何想法或建议吗?

1 个答案:

答案 0 :(得分:1)

那是因为默认情况下,测试类没有打包在任何项目中,更不用说你的alpha项目了。如果您打开工作区分辨率功能,它可能会在您的日食中起作用。

要使其与Maven一起使用,请考虑在alpha中创建仅包含测试类的测试jar,并在beta中添加为依赖项。

阅读:https://maven.apache.org/plugins/maven-jar-plugin/examples/create-test-jar.html

  

你可以制作一个包含你的测试类和的jar   资源。

<project>
  ...   
  <build>
    <plugins>
      ...
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <version>2.6</version>
        <executions>
          <execution>
            <goals>
              <goal>test-jar</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      ...
    </plugins>
  </build>   
  ... 
</project>
     

要在其他项目中重用此工件,您必须声明此项   依赖于类型test-jar:

<project>   
  ...   
  <dependencies>
    <dependency>
      <groupId>groupId</groupId>
      <artifactId>artifactId</artifactId>
      <type>test-jar</type>
      <version>version</version>
      <scope>test</scope>
    </dependency>   
  </dependencies>
  ... 
</project>
     

注意:这个解决方案的缺点是你没有得到   自动传递测试范围的依赖项。 Maven只解决了   编译时依赖项,因此您必须添加所有其他依赖项   需要手动编写测试范围的依赖项。