代码之家  ›  专栏  ›  技术社区  ›  Viktor Mellgren

测试中的NoClassDefFoundError和ClassNotFound

  •  0
  • Viktor Mellgren  · 技术社区  · 9 年前

    嗨,我有一个类似这样的结构。

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

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

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

    类本身正在实现 src/main/java ,所以它有点像 FooBarFactoryForTest implements FooBarFactory 。当我这样做时,它找不到FooBarFactoryForTest new FooBarFactoryForTest() β测试中

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

    有什么想法或建议吗?

    1 回复  |  直到 9 年前
        1
  •  1
  •   mystarrocks    9 年前

    这是因为测试类在任何项目中都不是默认打包的,更不用说您的 alpha 项目如果您打开了工作区解析功能,它可能会在您的eclipse中工作。

    使其与 Maven ,请考虑在中创建一个仅包含测试类的测试jar 阿尔法 并作为依赖项添加到 beta .

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

    您可以生成一个包含测试类和 资源。

    <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>
    

    要在其他项目中重用此工件,必须声明 与类型测试jar的依赖关系:

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

    注意:此解决方案的缺点是您无法获得 自动传递测试范围的依赖项。Maven仅解析 编译时依赖项,因此您必须添加所有其他 手动设置所需的测试范围依赖项。