携程|EMT4J——让 Java 应用升级更轻松( 二 )



4、张三点击\"The schema of java version changed in JDK9\"查看问题的详情 , 看到提示如下具体的类:Location: file:/home/app/deploy/app-service-1/notify-utils-2.2.5.jar Target: com.app.services1.utils.VersionInfo 。
5、张三打开 app-service-1 的工程看到如下的代码 , 下面的代码显然是无法处理类似于 17.0.1 版本号 。
private final String JAVA_VERSION = System.getProperty(\"java.version\"); private final int getJavaVersionAsInt() { if (this.JAVA_VERSION == null) return 0; String str = this.JAVA_VERSION.substring(0 1); str = str + this.JAVA_VERSION.substring(2 3); if (this.JAVA_VERSION.length()= 5) { str = str + this.JAVA_VERSION.substring(4 5);else { str = str + \"0\";return Integer.parseInt(str); 【携程|EMT4J——让 Java 应用升级更轻松】6、张三参考报告中的 How to fix 了解到 JDK 9 以后 Java Version 的 Schema 发生了变化 , 按新的 Schema 修改代码 。

7、张三按依次参考报告中对其它问题修改 。 修改完成以后 , 在开发机器上使用目标版本 JDK 启动验证功能正确性 。
EMT4J——工具特性一览 以上使用 EMT4J 工具帮助张三从 JDK 8 成功地升级到 JDK 17 , 那么 EMT4J 工具具有哪些特性?
1、支持 Java Agent、命令行工具以及 Maven 插件等方式使用
Java Agent 可以获取更多运行时上下文信息 , 能提供准确调用栈 , 能发现更多的问题 命令行工具方便使用 , 无须启动应用 , 但是可能会存在误报 Maven 插件可以集成在构建阶段 , 可在开发阶段发现问题 2、支持多种潜在不兼容性问题分析
JDK 8 到 JDK 11 JDK Internal API 的使用 System ClassLoader 不再是 URLClassLoader 子类 Arrays.asList 返回类型变化 Java Version 的 Shema 发生变更 JPMS 需要增加 add-exports 和 add-opens 时区数据变更为 CLDR 引起相关不兼容 Pattern.compile 的 API 变更 JVM 选项变更 ... JDK 11 到 JDK 17 删除了 Nashorn 删除了RMI 和 Java Applet 部分 Class 无法反射获取 Field ... 3、支持 HTML、TXT 和 JSON 格式的输出
如何参与贡献? 如果您在使用 EMT4J 的过程中 , 遇到如下的问题:
工具应该发现的兼容性问题 , 但是实际没有发现 工具报告的问题上下文不准确 , 不方便查找问题在哪里 工具报告的问题描述不清晰 , 难以指导如何修改增加一些新的功能 , 比如工具支持其它一些格式 ... 都可以通过如下的方式参与贡献:
创建 issue 描述您遇到的问题 自己 Fork 以后修改测试后 , 并通过 PR 合入 master 结语:因为目前还有很多的 Java 应用仍然停留在 JDK 8上 , 所以这些应用正在规划或者正在升级 JDK 中 , 希望通过 EMT4J 让我们的升级工作更轻松一些 。
我们在工具中沉淀了阿里巴巴升级 JDK 的经验 , 但是肯定还有很多我们没有遇到的兼容性问题 , 另外 JDK 新的版本不断会发布 , 也会不断有新的兼容性问题出来 。 我们希望通过开源的方式 , 能够有更多的开发者参与到工具中 , 给工具不断增强功能让更多的 Java 应用升级变得更简单 。 更多内容 (如何使用、贡献等) 可以参考:https://github.com/adoptium/emt4j
本文为阿里云原创内容 , 未经允许不得转载 。