从 Java 8 迁移到 Java 11,兼容性检查工具 发表于 2022-09-27 | 分类于 java | 暂无评论 把一个项目从 Java 8 迁移到 Java 11,最简单的办法,当然是直接强行升级,遇到一个错就改一个错,别看它 low,但是对于一个小型且非核心的项目来说,已经足够了。 当然,对于比较重要的项目,且代码行数不少的情况,最标准的姿势就是对着官方文档进行操作。 官方文档就是下面这份 Java 11 的迁移说明文档: [迁移说明文档](https://docs.oracle.com/en/java/javase/11/migrate/index.html "迁移说明文档") 里面详细说明了 Java 8 到 Java 11 可能出现的兼容性问题,并给出了修改措施或建议。 理论上来说,对着官方文档一个字一个字去读,并且把代码的每一行都肉眼扫描一遍,该修改的地方做出修改,肯定是可以完美迁移的。 但人毕竟不是机器,自己写的代码可能就有上千甚至上万行,还得算上引入的第三方类库,这显然就不是人干的事情了。 所以,就有一款神奇的工具,可以帮我们自动扫描 JDK 升级过程中需要修改或注意的地方,并直接生成一个可视化的 HTML 报告,厉害了! ## EMT4J 这款工具的名字叫做 EMT4J,即 Eclipse Migration Toolkit for Java,直译过来就是 Eclipse 基金会旗下的,用来迁移的,工具集,为 Java 准备的。 [官网地址](https://projects.eclipse.org/projects/adoptium.emt4j "官网地址") ### 支持 - 8 -> 11 - 8 -> 17 - 11 ->17 这款工具是阿里写的,捐赠给了 Eclipse 基金会,所以阿里云官方公众号推出过关于介绍它的推文: [推文](https://mp.weixin.qq.com/s/9pKGVctSd-phrV4sKqqfxA "推文") [代码仓库](https://github.com/adoptium/emt4j "代码仓库") ## 它怎么用 点击下载地址下载好 EMT4J 后,查看它的目录结构,发现非常简单明了直观。 如果只使用 javaagent 方式来分析项目,那么对于使用者来说只需要关注 agent 目录下的两个 jar 即可。 从 8 迁移到其他 JDK 就使用: emt4j-agent-jdk8-0.3.jar 从 11 迁移到其他 JDK 就使用: emt4j-agent-jdk11-0.3.jar ### 我们写一个简单的 Hello World 程序,并用 JDK8 编译。 ```shell public class Hello { public static void main( String[] args ) { System.out.println( "Hello World!" ); } } ``` 然后对其进行 8 到 11 的迁移分析。 ```shell java -javaagent:emt4j-agent-jdk8-0.3.jar=to=11 Hello ``` 对输出结果可视化为 HTML 格式。 ```shell 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 "地址") 转载自: >https://mp.weixin.qq.com/s/0iWRr1H1LXjgu1jAP__oKQ