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

时间:2015-02-17 10:14:33

标签: java eclipse maven junit surefire

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

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

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

现在,当我们尝试运行测试时,我们从位于 AA 的类中获得NoClassDefFoundError,无论我们是否在Eclipse中运行(运行方式> JUnit测试)或与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

1 个答案:

答案 0 :(得分:1)

将Maven构建运行配置的主选项卡中的基目录设置为 A-B 修复了该问题。这似乎与先前为JUnit设置工作目录具有相同的效果。另外,我编辑了POM,以便从命令行运行测试:

<plugin>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.18</version>
    <configuration>
        <workingDirectory>A-B</workingDirectory>
    </configuration>
</plugin>