写点什么

简化 Java 应用的升级:Eclipse Migration Toolkit for Java(EMT4J)

  • 2023-01-28
    北京
  • 本文字数:1764 字

    阅读完需:约 6 分钟

简化Java应用的升级:Eclipse Migration Toolkit for Java(EMT4J)

Adoptium发布了Eclipse Migration Toolkit for Java(EMT4J),这是一个开源的Eclipse项目,能够分析和升级应用的 Java 版,以便于从 Java 8 升级至 Java 11,从 Java 11 升级至 Java 17。EMT4J 将支持升级到未来的 LTS 版本。


很多组织都建议使用最新的 Java 运行时,以获取安全性和功能方面的改进。同时,长期支持(Long Term Support)的 Java 版本每两年发布一次,Spring Framework 6等项目已经至少需要 Java 17。令人遗憾的是,新 Java 版本的采用是相对缓慢的。例如,在 2022 年,也就是 Java 11 发布四年之后,只有不到 49%的 Java 应用在使用该版本。


将应用升级至较新的 Java 版本意味着开发人员需要解决 Java 内部变更和功能移除所带来的所有问题。这涉及的功能包括 Nashorn、J2EE 和 Java 等包的移除、API 的变更以及对 Java 内部访问更严格的限制。


EMT4J 提供了一个支持 Maven 插件(目前在 Maven 中央仓库尚不可用)、Java 代理以及命令行的解决方案,以便于分析项目与新版本 Java 的不兼容性,结果会以**TXTJSONHTML**格式输出。


为了演示 EMT4J,考虑如下的样例应用,它调用了 Java 11 中已经删除的**Thread.stop()**方法:


Thread thread = new Thread();thread.stop();
复制代码


在克隆 Git仓库并将 Maven 工具链配置为 JDK 8 和 JDK 11 之后,可以采用如下命令构建项目:


mvn clean package -Prelease
复制代码


这将会在_emt4j-assembly/target_目录生成一个**.zip**文件,该文件可以进行解压。在解压后的目录中,就可以进行分析了。例如,在命令行中运行如下的命令:


java -cp "lib/analysis/*" org.eclipse.emt4j.analysis.AnalysisMain -f 8 -t 17     -o java8to17.html /home/user/application/classes
复制代码


这将会分析指定目录下的类文件并在_java8to17.html_文件中显示从 Java 8 升级到 Java 17 时的潜在问题。另外,也可以使用归档文件解压后在_bin_目录下的**.bat.sh脚本来启动命令行分析。README文件描述了分析类和JAR**文件的所有可用选项。


由此生成的 HTML 文件将会展示描述、解决方案和问题的位置:


1.1 Removed API Back to Content1.1.1 DescriptionMany of these APIs were deprecated in previous releases and     have been replaced by newer APIs.1.1.2 How to fixSee corresponding JavaDoc.1.1.3 Issues ContextLocation: file:/home/user/application/classes/App.class,     Target: java.lang.Thread.stop()V
复制代码


除此之外,在 Java 应用启动的时候,可以使用EMT4J代理,或者在构建应用的时候使用Maven插件


该项目包含了从Java 8升级至11从Java 11升级至17的规则集。例如,用于校验应用是否使用 JDK 内部 API 的JDK内部API规则:


<rule desc="JDK internal API" type="reference-class"       match-type="by-package" class-package-file="jdk_internals.cfg"    result-code="JDK_INTERNAL" must-contain-in-bytecode="true"    sub-result-code="@{subResultCode}" priority="p4">    <support-modes>        <mode>agent</mode>        <mode>class</mode>    </support-modes></rule>
复制代码


support-modes表明该规则是否可以用于 agent模式和/或静态分析,其中静态分析也就是class模式,能够用于命令行和 Maven 插件中。关于翻译资源的打包是通过result-code属性实现的,在本例中,也就是_JDK_INTERNAL_,它会映射为_emt4j-common/src/main/resources/default/i18n_目录中的JDK_INTERNAL.propertiesJDK_INTERNAL_zh.properties翻译文件。


EMT4J 会扫描应用的中的包和类,比如_emt4j-common/src/main/resources/default/rule/8to11/data/目录中_class-package-file jdk_internals.cfg文件所定义的sun.niosun.reflect


实际的规则类型_reference-class_位于_emt4j-common/src/main/java/org/eclipse/emt4j/common/rule/impl_目录中,因为 JDK 内部规则中,support-modes的值为agentclass


@RuleImpl(type = "reference-class")public class ReferenceClassRule extends ExecutableRule {
复制代码


现有的规则可以提供灵感,以便于按照README文件所定义的说明添加自定义规则。


原文链接:

Eclipse Migration Toolkit for Java (EMT4J) Simplifies Upgrading Java Applications


相关阅读:

GraalVM Java 编译器将于 2023 年加入,与 OpenJDK 的发布节奏和流程保持一致

Java 近期新闻:Ideal Graph Visualizer 开源、TomEE MicroProfile 5.0 认证

2023-01-28 09:3517920

评论

发布
暂无评论
发现更多内容

产业新基建,撬动数字经济发展新机遇

京东科技开发者

人工智能 新基建 京东

架构师训练营第 1 期 第 10 周作业

李循律

深入了解物理内存管理-伙伴(Buddy)算法

ShenDu_Linux

Linux 算法 内存管理 内核

RocketMQ 很慢?引出了一个未解之谜

阿里巴巴云原生

开源 云原生 中间件 Java 25 周年 Arthas

怎么保护自己的音乐作品不被盗用,用FL制作防盗水印片段。

奈奈的杂社

区块链电子票据解决方案--区块链赋能纳税服务

13530558032

“摸爬滚打”多年,从月薪3K到30Kjava大神,我是怎么蜕变的?

比伯

Java 编程 架构 面试 计算机

使用 Jira Service Management 管理资产,您需要知道的5件事

Atlassian

数字化转型 Atlassian Jira ITSM ITIL

华为云MVP高浩:打破AI开发瓶颈,解决数据、算法、算力三大难题

华为云开发者联盟

人工智能 数据 华为云

对于CRM之于现代化企业的影响以及作用的分析

Marilyn

敏捷开发 快速开发 企业开发 CRM 企业应用

LeetCode题解:121. 买卖股票的最佳时机,暴力法,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

Spring Boot 2.4.0正式发布,全新的配置文件加载机制(不向下兼容)

YourBatman

云原生 Spring Boot 新特性

首家支持阿里云函数计算 APM技术为Serverless环境赋能

博睿数据

阿里云 Serverless 运维 APM 函数

MindSpore手写数字识别初体验,深度学习也没那么神秘嘛

华为云开发者联盟

人工智能 学习 手写识别

打工人、打工魂、高效MES助力打工者都是人上人

Learun

敏捷开发

Vim - 可能是投资回报率最高的 Editor

hbwtJLChslMpxA8n

vim

从应用迁移到平台微认证:鲲鹏技术解读

华为云开发者联盟

鲲鹏 代码迁移 arm

什么是低代码(Low-Code)?

阿里巴巴云原生

程序员 云原生 代码

架构师第一期作业(第 11 周)

Cheer

作业

一点就透的二分查找算法

比伯

Java 编程 程序员 面试 计算机

架构师训练营第十一周作业

邓昀垚

架构师训练营第二周框架设计学习总结

Geek_xq

架构师训练营第十一周总结

邓昀垚

使用resilio实现多集群的k8s pod数据双向非实时同步

东风微鸣

Kubernetes 探索与实践 openshift

业务中台建设 - 自底向上演进

孝鹏

架构 中台 业务线 数字化转型 沟通

多线程源码明白了吗?不明白的话来看腾讯大牛给你画的面试重点

996小迁

Java 学习 编程 架构 面试

【行业分享】叮咚课堂邱明丰:在线教育的最终形态的探索

ZEGO即构

区块链商品溯源系统开发,区块链防伪追溯系统

13530558032

排查指南 | mPaaS 小程序提示“网络不给力”时该如何排查?

蚂蚁集团移动开发平台 mPaaS

小程序 网络 小程序生态 mPaaS

最近我发现瑞幸在这样做私域运营

Linkflow

营销数字化 客户数据平台 CDP 私域运营

时空碰撞系列·终

誓约·追光者

数据分析 Sparksql

简化Java应用的升级:Eclipse Migration Toolkit for Java(EMT4J)_编程语言_Johan Janssen_InfoQ精选文章