jfinal-enjoy和jdk版本的兼容性问题

请教大神:线上环境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版本一致,为什么会报这个错呢?

评论区

JFinal

2018-12-14 12:46

enjoy 3.5 虽然在 pom.xml 中的编译级别是 jdk 1.7,但 SyncWriteMap.putIfAbsent(...) 这个确实用到了 Java 8 的 API

不是不去兼容 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

JFinal

2018-12-14 12:48

简单一句话,enjoy 3.5 确实是冲着 Java 1.7 去支持的,但是 putIfAbsent 无意中用到了 java 8 的 API,但是编译并发布的时候并没有出现异常,所以发布成功了

按理说这种情况,编译器应该直接报错才对

JFinal

2018-12-14 12:49

这个问题解决起来或许很容易,或许也麻烦,因为我也不知道还有哪些 API 也跟这个类似,肉眼发现不了,编译器又不提示,这就很难判断哪些是 Java 1.8 支持但 1.7 不支持

gaols

2018-12-14 15:06

@JFinal 就向你说的,可能难判断哪些api无意中使用了java8的api 但是目前是发现了这个,希望大神现将这个发现的小bug在下个小版本修复下。再次感谢、

热门反馈

扫码入社