Maven 多模块项目中的 JUnit 测试抛出 NoClassDefFoundError
JUnit tests in Maven multi-module project throw NoClassDefFoundError
我们的项目结构如下:
├─ A
├─ A-A
├─ A-B
├─ A-C
├─ A-D
├─ A-E
├─ A-F
├─ A-G
相关的 JUnit 测试位于 A-A。在我们使用 Maven 之前,我们必须在 Eclipse 中调整 运行 配置(将参数选项卡中的工作目录设置为 A-B 以启动应用程序)以启动所有测试没有错误。
现在,当我们尝试 运行 测试时,我们从位于 A-A 的 class 得到一个 NoClassDefFoundError
,无论我们是否在 Eclipse (运行 As > JUnit Test) 或 Maven (mvn test
) 中执行此操作。我认为这与 similar issues on Stack Overflow 不同,因为我们的测试根本不起作用。
我的猜测是我们的 POM 配置错误,Surefire 无法找到所有 class 文件或类似文件。有没有办法像我们之前使用 运行 配置那样配置插件?还是此错误是由其他原因(如 M2Eclipse)引起的?
编辑:项目A-A的内部结构如下(ClassCausingError
extends a class from Maven 依赖项):
├─ A-A
├─ src/main/java
├─ foo/bar/ClassCausingError.java
├─ src/main/resources
├─ src/test/java
├─ foo/bar/ClassCausingErrorTest.java
├─ target
├─ pom.xml
将 Maven 构建 运行 配置的主选项卡中的基本目录设置为 A-B 解决了这个问题。这似乎与之前为 JUnit 设置工作目录具有相同的效果。此外,我编辑了 POM 以从命令行进行测试 运行:
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.18</version>
<configuration>
<workingDirectory>A-B</workingDirectory>
</configuration>
</plugin>
我们的项目结构如下:
├─ A
├─ A-A
├─ A-B
├─ A-C
├─ A-D
├─ A-E
├─ A-F
├─ A-G
相关的 JUnit 测试位于 A-A。在我们使用 Maven 之前,我们必须在 Eclipse 中调整 运行 配置(将参数选项卡中的工作目录设置为 A-B 以启动应用程序)以启动所有测试没有错误。
现在,当我们尝试 运行 测试时,我们从位于 A-A 的 class 得到一个 NoClassDefFoundError
,无论我们是否在 Eclipse (运行 As > JUnit Test) 或 Maven (mvn test
) 中执行此操作。我认为这与 similar issues on Stack Overflow 不同,因为我们的测试根本不起作用。
我的猜测是我们的 POM 配置错误,Surefire 无法找到所有 class 文件或类似文件。有没有办法像我们之前使用 运行 配置那样配置插件?还是此错误是由其他原因(如 M2Eclipse)引起的?
编辑:项目A-A的内部结构如下(ClassCausingError
extends a class from Maven 依赖项):
├─ A-A
├─ src/main/java
├─ foo/bar/ClassCausingError.java
├─ src/main/resources
├─ src/test/java
├─ foo/bar/ClassCausingErrorTest.java
├─ target
├─ pom.xml
将 Maven 构建 运行 配置的主选项卡中的基本目录设置为 A-B 解决了这个问题。这似乎与之前为 JUnit 设置工作目录具有相同的效果。此外,我编辑了 POM 以从命令行进行测试 运行:
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.18</version>
<configuration>
<workingDirectory>A-B</workingDirectory>
</configuration>
</plugin>