在java 11上运行maven测试时,由内部类上的java.lang.classnotfoundexception引起的java.lang.noclassdeffounderror

enyaitl3  于 2021-07-08  发布在  Java
关注(0)|答案(0)|浏览(258)

我有一个项目是这样的:

Parent project
   | Core
   | Subproject 1
       | dependent on Core
   | Subproject 2
       | dependent on Core
   | Subproject 3
       | dependent on Core and Subproject 1
etc...

最初构建在Java8上,我想升级到Java11。
一切正常,包括每个子项目中的测试,除了其中一个子项目中的三个特定集成测试,这些测试在使用eclipse(通过junit)运行时通过,但在通过maven(mvn集成测试)运行时不通过。
他们都扔:

java.lang.NoClassDefFoundError: com/../../../SomeDAO (from Core)
    at <package-name>@<version>/<one of the submodules>.initialize(<class>.java:47)
    at <package-name>@<version>/<one of the submodules>.setup(<class>.java:41)
Caused by: java.lang.ClassNotFoundException: com/../../../SomeDAO (from Core)
    at <package-name>@<version>/<one of the submodules>.initialize(<class>.java:47)
    at <package-name>@<version>/<one of the submodules>.setup(<class>.java:41)

其他测试由于同样的原因失败,但是dao类或那些测试没有什么特别之处。
另外,我的测试位于子项目1/src/test中,它从core导入一个实用程序类,然后从core导入实际的dao(也从core导入)。这显然意味着子项目1的类路径中有核心,可以很好地访问它—类是公共的。
该项目运行的是Java11、JUnit5和Mockito3.6。我使用的是maven3.6,没有java11模块(在我的代码库中)。在升级到Java11之后,有人见过类似的行为吗?
编辑:
我确实在eclipse中运行了maven->update项目
看到这个问题后,我已经将mockito升级到最新的次要版本
我尝试了一个较新的小Java11版本
我试过把刀移到另一个包里
我已经尝试将dao直接导入到测试类中(在类路径中没有正确导入类的情况下)
dao导入java.sql和java.util类(尽管java.util类肯定是由其他测试导入的)
编辑:这是我的子项目pom文件:https://pastebin.com/u7zgu5in

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题