写点什么

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

评论

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

2019最新百度、头条、小米,retrofit源码

android 程序员 移动开发

[ CloudWeGo 微服务实践 - 05 ] 服务注册(1)

baiyutang

golang 微服务 11月日更

2020京东最新Android面试真题解析,kotlinarrow库

android 程序员 移动开发

2020应届毕业生,Android春招总结,已入职小米,阿里牛逼

android 程序员 移动开发

2020抖音短视频爆火!它的背后到底是什么—,手把手教你写Android项目文档

android 程序员 移动开发

2020Android进阶者的新篇章,一起努力应对互联网寒冬,冲刺年薪40w

android 程序员 移动开发

2020个人开发者做一款Android-App需要知道的事情,年薪百万在此一举(1)

android 程序员 移动开发

架构设计七 如何设计异地多活架构

nydia

2020年12月大厂BATJ面试ing-本以为学了个好找工作的Android开发,没想到又是坑

android 程序员 移动开发

2020年Android开发年终总结之如何挤进一线大厂?,BAT这种大厂履历意味着什么

android 程序员 移动开发

2020年度总结:如果系统的Android学习可以这么简单!为什么不来看看呢

android 程序员 移动开发

2020上半年百度Android岗(初级到高级)面试真题全收录

android 程序员 移动开发

2020关于面试字节跳动,我总结一些面试点,希望对最近需要面试的你们一些帮助

android 程序员 移动开发

2020年失业后我整理了一份系统的Android面试题(含答案)

android 程序员 移动开发

2019年末阿里、百度等大厂技术面试题汇总(附答案,2021年Android社招面试题精选

android 程序员 移动开发

2019年阿里Android面试必问:Java+性能优化,android编程实战

android 程序员 移动开发

2020了,Android开发是否真的还有出路!25岁的我还有机会吗(1)

android 程序员 移动开发

2020字节跳动安卓程序员视频面试,这五点一定有助你顺利拿到offer(1)

android 移动开发

【投稿赢大奖】 -- 奇思妙想+AI技术=?

百度大脑

人工智能 百度

2019,2021我是如何拿到小米、京东、字节的offer

android 程序员 移动开发

2020 年,我这样在项目中使用 MVVM,BATJ等企业Android面试知识分享

android 程序员 移动开发

Node.js 中 fs.renameSync 报错

liuzhen007

11月日更

2020了,Android开发是否真的还有出路!25岁的我还有机会吗

android 程序员 移动开发

2020年阿里巴巴Android面经:拿到字节跳动offer后,简历又被阿里捞了起来

android 程序员 移动开发

2020应届毕业生,Android春招总结,已入职小米(1),kotlin安卓开发教程

android 程序员 移动开发

2020新一波跳槽季过后,Android程序员精选,大厂,flutter微信小程序

android 程序员 移动开发

2020Android面试心得,已拿到offer,轻松获得一线大厂面试offer

android 程序员 移动开发

2020京东Android岗面试题大全(附赠京东内部真题解析PDF)

android 程序员 移动开发

2020字节跳动安卓程序员视频面试,这五点一定有助你顺利拿到offer

android 程序员 移动开发

2020年腾讯丶百度丶字节丶OPPO等Android面试大全,附带教你如何写好简历

android 程序员 移动开发

2020-2021最新大厂面试题附答案解析【建议收藏】,android应用开发题库

android 程序员 移动开发

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