java - java.lang.NoSuchMethodError: 'void org.springframework.util.Assert.state(boolean, java.util.function.Supplier)'
问题描述
我尝试将项目从 JDK8 升级到 JDK11,整个业务逻辑运行良好,但是当 maven 到达测试类时,它们都失败并出现完全相同的异常 例如
initializationError(com.foo.bar.etc.utils.TimeUtilsTest) Time elapsed: 0 sec <<< ERROR!
java.lang.NoSuchMethodError: 'void org.springframework.util.Assert.state(boolean, java.util.function.Supplier)'
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.ensureSpringRulesAreNotPresent(SpringJUnit4ClassRunner.java:120)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.<init>(SpringJUnit4ClassRunner.java:141)
at org.springframework.test.context.junit4.SpringRunner.<init>(SpringRunner.java:49)
at jdk.internal.reflect.GeneratedConstructorAccessor6.newInstance(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490)
at org.junit.internal.builders.AnnotatedBuilder.buildRunner(AnnotatedBuilder.java:104)
at org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.java:86)
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:26)
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:33)
at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:283)
at org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:173)
at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:153)
at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:128)
at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:203)
at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:155)
at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:103)
一旦一切都完成了,它只是用列表总结所有测试类
Tests in error:
BaseSpringTest.initializationError » NoSuchMethod 'void org.springframework.ut...
EmailAttachmentDaoImplTest.initializationError » NoSuchMethod 'void org.spring...
EmailEventDaoImplTest.initializationError » NoSuchMethod 'void org.springframe...
EmailMappingDaoImplTest.initializationError » NoSuchMethod 'void org.springfra...
EmailRequestDaoImplTest.initializationError » NoSuchMethod 'void org.springfra...
EmailWindowsDaoImplTest.initializationError » NoSuchMethod 'void org.springfra...
ServiceClientDaoImplTest.initializationError » NoSuchMethod 'void org.springfr...
TemplateContextDaoImplTest.initializationError » NoSuchMethod 'void org.spring...
TemplateMappingDaoImplTest.initializationError » NoSuchMethod 'void org.spring...
TemplateMetadataDaoImplTest.initializationError » NoSuchMethod 'void org.sprin...
VarMetadataDaoImplTest.initializationError » NoSuchMethod 'void org.springfram...
TemplateContextStorageTest.initializationError » NoSuchMethod 'void org.spring...
ApiRequestFilterTest.initializationError » NoSuchMethod 'void org.springframew...
TemplateResolutionServiceTest.initializationError » NoSuchMethod 'void org.spr...
AwsS3ClientTest.initializationError » NoSuchMethod 'void org.springframework.u...
TimeUtilsTest.initializationError » NoSuchMethod 'void org.springframework.uti...
会不会是某个版本的问题?我知道它需要添加一些 jar,或者将 JDK 之外的其他东西升级到版本 11
顺便说一句,测试在 JDK8 上运行良好,我想这是一个重要的细节。
解决方案
将 spring-core 从版本 4 移动到版本 5 后问题得到解决。由于某种未知原因,所有 spring jar 都是版本 5,除了 spring-core,更奇怪的是它是一个 spring boot 应用程序,所以整个 spring 包jars 是版本 5,除了 spring-core。
推荐阅读
- xcode - 如何将旧版构建系统与 Xcode 10 的“xcodebuild”一起使用?
- bash - 如果任何命令失败,则在最后以非零代码退出 shell 脚本
- scala - 这个 Scala 循环在读取文件时有什么问题
- database - 每当新用户在推荐链接 ID 下注册时,如何将数据插入 user_level
- php - 在codingniter中已经存在文件上传功能
- html - IE(边缘)和谷歌浏览器中的图像对齐方式发生了变化
- javascript - 为什么我没有在对象中看到添加的属性?
- android - 使用 Android-NDK 的 NCurses 6.0 编译错误
- python - 如何将python程序与数据库连接?
- ruby-on-rails - Ruby on rails sslv3 警告握手失败