java - Maven 多模块项目中的 JUnit 测试抛出 NoClassDefFoundError

标签 java eclipse maven junit surefire

我们的项目具有以下结构:

├─ A
   ├─ A-A
   ├─ A-B
   ├─ A-C
   ├─ A-D
   ├─ A-E
   ├─ A-F
   ├─ A-G

相关的 JUnit 测试位于 A-A 中。在使用 Maven 之前,我们必须在 Eclipse 中调整运行配置(将参数选项卡中的工作目录设置为启动应用程序的 A-B),以便无错误地启动所有测试。

现在,当我们尝试运行测试时,我们会从位于 A-A 的类中收到 NoClassDefFoundError ,无论我们是否在 Eclipse 中执行此操作(运行方式 > JUnit Test )或使用 Maven(mvn test)。我认为这与 similar issues on Stack Overflow 不同因为我们的测试根本不起作用。

我的猜测是我们的 POM 配置错误,Surefire 无法找到所有类文件或类似文件。有没有一种方法可以像我们之前使用运行配置那样配置插件?或者这个错误是由其他原因引起的(例如 M2Eclipse)?

编辑:项目A-A的内部结构如下(ClassCausingError从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>

关于java - Maven 多模块项目中的 JUnit 测试抛出 NoClassDefFoundError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28559551/

相关文章:

java - 如何使用推送机器人在我现有的 Android 应用程序中添加推送通知

eclipse - Eclipse Juno缓慢地在编辑器中切换选项卡

eclipse - 使用eclipse和maven,有没有一种快速的方法可以将所有目标和子文件夹标记为派生?

java - 如何将 JLabel 文本放在 JTextField 上

Java:获取两个数组,如果其中一个的长度小于另一个的长度,则将缺失值替换为1

java - 如何用斜杠分割字符串

java - IntelliJ IDEA 中的错误 "ClassNotFoundException"

android - Eclipse 不支持 SDK layoutlib 版本

mongodb - 具有MongoDB镜像的docker-maven-plugin在启动时挂起

maven - 如何通过代理使用 Maven?