【问题标题】:JUnit tests in Maven multi-module project throw NoClassDefFoundErrorMaven 多模块项目中的 JUnit 测试抛出 NoClassDefFoundError
【发布时间】:2015-04-18 00:48:38
【问题描述】:

我们的项目结构如下:

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

相关的 JUnit 测试位于 A-A 中。在我们使用 Maven 之前,我们必须在 Eclipse 中调整运行配置(将参数选项卡中的工作目录设置为启动应用程序的 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

【问题讨论】:

  • 目前我怀疑您的问题中是否有足够的信息来回答它。不过要清楚一点,您在 A-A 中有一个测试会为 A-A 中的另一个类抛出 NoClassDefFoundError?
  • 首先我们是在谈论单元测试还是集成测试?此外,您应该知道单元测试仅限于给定的模块。
  • @Duncan 是的,A-A 中有一个测试会抛出 A-A 中的类的错误(我绝对不明白)。
  • @beatngu13 你能编辑你的问题以包含测试类的路径和找不到的类的路径吗?另请参阅this answer,它解释了为什么 NoClassDefFoundError 与 ClassNotFoundException 不同。
  • @beatngu13 我认为您需要为我们编写一个最小的示例。您的示例路径看起来非常好,所以应该没有理由 ClassCausingErrorTest 找不到 ClassCausingError。因此,开始剥离文件和 POM 语句,直到您在问题中分享的内容最少。在你完成之前,我怀疑我们可以帮助你。

标签: java eclipse maven junit surefire


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-16
    • 1970-01-01
    • 2018-04-19
    • 1970-01-01
    • 2015-12-15
    • 1970-01-01
    相关资源
    最近更新 更多