写点什么

简化 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:3518138

评论

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

超详细:完整的推荐系统架构设计

博文视点Broadview

架构 算法 推荐系统

抗疫代码入国家博物馆, 程序员的巅峰时刻!

程序员生活志

程序员

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

Hanson

超级TV盒子,超清秒播,解锁全网VIP资源!

程序员生活志

资源

全票通过!易观开源项目DolphinScheduler进入Apache孵化器

易观大数据

大数据

yuanhang

Centos 7 虚拟机

35岁以上的程序员们,后来都干什么去了?

华为云开发者联盟

程序员 职业规划 架构师

为什么一个还没毕业的大学生能够把 IO 讲的这么好?

苹果看辽宁体育

Java 后端 io

解Bug之路-Nginx 502 Bad Gateway

无毁的湖光

nginx Linux TCP

字节小组长无意中得知整个部门的薪资,自己28K,手下却有35K,怎么办?

程序员生活志

字节跳动 职场 薪资

anyRTC小程序SDK 4.0上线

anyRTC开发者

小程序 WebRTC 语音 直播 RTC

如何在一台电脑上管理多Github账号

Matrix Chan

git GitHub 版本管理工具 开发日志

限量版Netty纯手打笔记,年薪80W架构师耗时1个月整理出

Java架构师迁哥

架构师0期Week13作业

Nan Jiang

对PageRank的理解

2流程序员

Fettley全球共识共享智能合约资产计划 掀起行业追捧热潮

InfoQ_967a83c6d0d7

oeasy 教您玩转linux 之010208 满屏乱码 bb

o

开源流数据公司 StreamNative 正式加入 CNCF,积极推动云原生策略发展

Apache Pulsar

云原生 pulsar Apache Pulsar 消息系统 消息中间件

如何在企业微信上搭建一款活动报名 App

Ceelog

企业微信 Go 语言

Redis单线程为什么能做到高性能和io多路复用它是个什么鬼

Java架构师迁哥

你应该了解的MySQL锁分类

X先生

MySQL 数据库 sql 数据库优化

​程序员离职后收到原公司 2400 元,被告违反竞业协议赔 18 万

程序员生活志

程序员 职场

干货来袭!20例JavaWeb项目开发精粹;(内含源码)

Java架构师迁哥

anyRTC - 模仿微信音视频通话功能

anyRTC开发者

WebRTC 语音 直播 RTC 安卓

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

Hanson

从零开始搭建完整的电影全栈系统(一)——数据库设计及爬虫编写

刘强西

爬虫 Scrapy

LeetCode题解:225. 用队列实现栈,一个队列, 压入 - O(n), 弹出 - O(1),JavaScript,详细注释

Lee Chen

大前端 LeetCode

PageRank 算法

周冬辉

防止APP窃取用户隐私问题,OPPO安全在行动

OPPO安全

App 安全 隐私保护 数据隐私 sdk

克隆虚拟机

yuanhang

大专生拿到阿里offer,却担心背调不过,网友:985在你面前黯淡无光

程序员生活志

面试 职场 阿里

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