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>