测试中的 NoClassDefFoundError 和 ClassNotFound

NoClassDefFoundError and ClassNotFound in test

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

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

在 beta 中我对 alpha 有依赖性,在 beta 测试中我参考了 alpha 的 src/test/java

中的 class

然而,当我 运行 Beta 测试时,它似乎找不到 Alpha 中的文件。

class 本身正在实现来自 src/main/java 的文件,因此它类似于 FooBarFactoryForTest implements FooBarFactory。当我在 beta 测试

中执行 new FooBarFactoryForTest() 时,它找不到 FooBarFactoryForTest

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

有什么想法或建议吗?

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

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

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

You can produce a jar which will include your test classes and resources.

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

To reuse this artifact in an other project, you must declare this dependency with type test-jar :

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

Note: The downside of this solution is that you don't get the transitive test-scoped dependencies automatically. Maven only resolves the compile-time dependencies, so you'll have to add all the other required test-scoped dependencies by hand.