今天查资料找到了除了EMT4J之外,其他可以用于Java版本迁移的工具。
这里简单的记录一下。
非Java er,有不同意见欢迎评论区交流。
JDK API Diff Report Generator
JDK API Diff是一个用于比较不同Java版本API区别的工具。github地址在这里。
例如,可以使用此工具比较OpenJDK 9和OpenJDK 10,OpenJDK 9和Oracle JDK 9等。
在项目的 docs 目录下内置了许多OpenJDK之间版本的对比:
ITS之间 :8to11,8to17,11to17
相邻版本之间的 :8to9,一直到17to18版本的都有
检测结果
这里以8to11为例解释检测结果:
先是一个表格显示对比的两个版本,创建时间,忽略哪些类等等。
可以看到这个检测结果忽略了内部类,我想看到内部类的变化,因此选择了重新生成检测结果。
编译
下载项目之后,要先一些进行配置才能编译。
toolchain
sudo vim ~/.m2/toolchains.xml
添加以下内容,因为我只打算比较LTS版本,所以这里选了8,11,17三个版本。
如果要比较其他版本,修改<version>和<jdkHome>里的内容。
<toolchains xmlns="http://maven.apache.org/TOOLCHAINS/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/TOOLCHAINS/1.1.0 http://maven.apache.org/xsd/toolchains-1.1.0.xsd">
<toolchain>
<type>jdk</type>
<provides>
<version>8</version>
<vendor>openjdk</vendor>
</provides>
<configuration>
<jdkHome>/usr/lib/jvm/java-8-openjdk-amd64</jdkHome>
</configuration>
</toolchain>
<toolchain>
<type>jdk</type>
<provides>
<version>11</version>
<vendor>openjdk</vendor>
</provides>
<configuration>
<jdkHome>/usr/lib/jvm/java-1.11.0-openjdk-amd64</jdkHome>
</configuration>
</toolchain>
<toolchain>
<type>jdk</type>
<provides>
<version>17</version>
<vendor>openjdk</vendor>
</provides>
<configuration>
<jdkHome>/usr/lib/jvm/java-1.17.0-openjdk-amd64</jdkHome>
</configuration>
</toolchain>
</toolchains>
pom.xml
修改<jdk1>和<jdk2>里的内容,改成要比较的两个jdk版本,只能选toolchains.xml里配置过的版本。
忽略的部分
忽略的部分是红色框出来的部分,可以看到默认是注释状态,这里不需要额外出来。
编译语句
mvn clean install
项目会将对应的jdk版本全部打包成jar包,通过对比jar包的区别,来生成差别html。
遇到的问题
Missing header in: jdk-api-diff/LICENSE.txt
这个我也没查明白,所以把pom.xml里的license-maven-plugin插件注掉解决的。
java.io.FileNotFoundException: /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/javaws.jar
项目里测试的版本是8u301,我目前在用的版本是8u382,jdk有一些区别,所以会有这个报错。
这里注释掉相关代码解决。
ps:jfxrt.jar注释掉是因为这个也报错了,这个里不再粘贴报错信息。
编译结果
对比的结果在target目录下,jdk-api-diff.html。
结果将近200m,比例子里的50m多了很多。
可以看到,这份检测结果里有内部类。