从 Java 8 迁移到 Java 11,兼容性检查工具

把一个项目从 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