把一个项目从 Java 8 迁移到 Java 11,最简单的办法,当然是直接强行升级,遇到一个错就改一个错,别看它 low,但是对于一个小型且非核心的项目来说,已经足够了。
当然,对于比较重要的项目,且代码行数不少的情况,最标准的姿势就是对着官方文档进行操作。
官方文档就是下面这份 Java 11 的迁移说明文档:
迁移说明文档
里面详细说明了 Java 8 到 Java 11 可能出现的兼容性问题,并给出了修改措施或建议。
理论上来说,对着官方文档一个字一个字去读,并且把代码的每一行都肉眼扫描一遍,该修改的地方做出修改,肯定是可以完美迁移的。
但人毕竟不是机器,自己写的代码可能就有上千甚至上万行,还得算上引入的第三方类库,这显然就不是人干的事情了。
所以,就有一款神奇的工具,可以帮我们自动扫描 JDK 升级过程中需要修改或注意的地方,并直接生成一个可视化的 HTML 报告,厉害了!
EMT4J
这款工具的名字叫做 EMT4J,即 Eclipse Migration Toolkit for Java,直译过来就是 Eclipse 基金会旗下的,用来迁移的,工具集,为 Java 准备的。
支持
- 8 -> 11
- 8 -> 17
- 11 ->17
这款工具是阿里写的,捐赠给了 Eclipse 基金会,所以阿里云官方公众号推出过关于介绍它的推文:
它怎么用
点击下载地址下载好 EMT4J 后,查看它的目录结构,发现非常简单明了直观。
如果只使用 javaagent 方式来分析项目,那么对于使用者来说只需要关注 agent 目录下的两个 jar 即可。
从 8 迁移到其他 JDK 就使用:
emt4j-agent-jdk8-0.3.jar
从 11 迁移到其他 JDK 就使用:
emt4j-agent-jdk11-0.3.jar
我们写一个简单的 Hello World 程序,并用 JDK8 编译。
public class Hello {
public static void main( String[] args ) {
System.out.println( "Hello World!" );
}
}然后对其进行 8 到 11 的迁移分析。
java -javaagent:emt4j-agent-jdk8-0.3.jar=to=11 Hello对输出结果可视化为 HTML 格式。
sh analysis.sh -o report.html emt4j-XXX.dat打开这个 HTML 文件,发现输出的结果正符合我们预期。
对嘛,一个 Hello World 程序自然不需要考虑迁移的兼容性问题~
拿一个复杂的项目举例
我们再尝试分析一个较为复杂的项目,依然进行刚刚那几步动作,这回输出的报告有点意思了。
我们通过目录中的摘要,就可以看到这个项目从 8 迁移到 11 所需要考虑的全部问题了。比如从 JDK 9 java.version 的 schema 发生了变化,点进去。
在如何修复那里,给出了官方说明文档。
原理分析请查看原文章:
转载自:
https://mp.weixin.qq.com/s/0iWRr1H1LXjgu1jAP__oKQ