请教大神:线上环境jdk-1.7 在使用enjoy-3.5的时候报错:
Caused by: java.lang.NoSuchMethodError: java.util.HashMap.putIfAbsent(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
at com.jfinal.kit.SyncWriteMap.putIfAbsent(SyncWriteMap.java:64) ~[enjoy-3.5.jar!/:na]
at com.jfinal.template.expr.ast.MethodKit.addExtensionMethod(MethodKit.java:287) ~[enjoy-3.5.jar!/:na]
at com.jfinal.template.expr.ast.MethodKit.<clinit>(MethodKit.java:243) ~[enjoy-3.5.jar!/:na]
at com.jfinal.template.expr.ast.SharedMethodKit.addSharedMethod(SharedMethodKit.java:123) ~[enjoy-3.5.jar!/:na]
at com.jfinal.template.expr.ast.SharedMethodKit.addSharedMethod(SharedMethodKit.java:79) ~[enjoy-3.5.jar!/:na]
at com.jfinal.template.EngineConfig.addSharedMethod(EngineConfig.java:343) ~[enjoy-3.5.jar!/:na]
at com.jfinal.template.EngineConfig.<init>(EngineConfig.java:79) ~[enjoy-3.5.jar!/:na]
at com.jfinal.template.Engine.<init>(Engine.java:59) ~[enjoy-3.5.jar!/:na]
at com.jfinal.template.Engine.<clinit>(Engine.java:53) ~[enjoy-3.5.jar!/:na]
at com.jfinal.template.ext.spring.JFinalViewResolver.<clinit>(JFinalViewResolver.java:53) ~[enjoy-3.5.jar!/:na]
at com.fastdev.core.config.EnjoyConfig.getJFinalViewResolver(EnjoyConfig.java:13) ~[classes!/:0.0.1-SNAPSHOT]
但我在看enjoy的时候,发现enjoy的pom.xml 中 target version 是1.7 跟我的 线上jdk版本一致,为什么会报这个错呢?
不是不去兼容 jdk 1.7, 而是 eclipse 没提示这个问题,编译也通过了,所以出现了你现在碰到的这个问题
建议几种解决办法:
1:拿到 enjoy 源码,改一下其中的几处 putIfAbsent,然后 mvn clean install 安装到你本地 maven 使用
2:退回到使用 enjoy 3.4,当然这个不建议,因为 3.4 的 ClassPathSource 有一个 bug,当然,你自己拿到 enjoy 3.5 的代码代替它就可以了
3:使用 Java 1.8