如何在同一Maven模块中为类修复ClassNotFoundException

时间:2019-08-09 20:49:36

标签: java maven classnotfoundexception maven-failsafe-plugin

我需要帮助对Java项目中的ClassNotFoundException进行故障排除。该项目是使用Maven构建的。它包含使用Failsafe插件和TestNG运行的特定集成测试。当我在IDE(IntelliJ IDEA)中运行它时,该测试通过了,但是当我使用mvn clean install从命令行运行它时,它失败并显示ClassNotFoundException。

为了排除环境问题,我在两台计算机macOS和Ubunutu上进行了尝试,结果在两台计算机上都得到了相同的结果。 Ubuntu计算机仅安装了一个JVM,因此IntelliJ和Maven必须在该计算机上使用相同的JVM。两台机器都使用Java 1.8。

不幸的是,我不共享代码,因为我不拥有它。因此,我将尽力描述相关细节。集成测试在运行时(而不是在编译时)在以下行上失败:Class c = MyPojo.class。集成测试和MyPojo在不同的程序包中,但是它们是在同一个Maven模块中定义的,因此它们在同一个jar文件中。

MyPojo是一个简单的POJO,它:

  • 未声明扩展或实现任何内容。
  • 具有仅包含基元和字符串的字段。
  • 没有任何静态初始值设定项。
  • 没有声明的构造函数。
  • 没有进口。

我查看了另一个名为MyPojo且具有相同类路径的类的项目依赖项,但找不到任何依赖项。为了排除依赖性冲突,我还尝试将MyPojo重命名为MyPojo2,结果是ClassNotFoundException引用了MyPojo2。

1 个答案:

答案 0 :(得分:1)

看起来这是故障保护插件的问题。我从2.22.2降级到2.18.1,现在一切正常。