AI 从业者都在关注的 NVIDIA GTC 2023 China AI Day 来了!报名戳👉 了解详情
写点什么

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

评论

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

兆骑科创科创赛事平台,创业赛事活动路演,线上直播路演

兆骑科创凤阁

分析Flask WSGI经过Nginx代理出现两次302问题

西北望高楼

flask Python.

DBPack SQL Tracing 功能及数据加密功能详解

峨嵋闲散人

分布式事务 分库分表 读写分离 dbmesh Database Mesh

直播|一次镜像,处处运行!如何制作一个 StarRocks Docker 镜像?

StarRocks

80篇国产数据库实操文档汇总(含TiDB、达梦、openGauss等)

墨天轮

数据库 opengauss TiDB 国产数据库 南大通用

Rancher 部署 DataKit 最佳实践

观测云

LeaRun.net快速开发动态表单

力软低代码开发平台

BPM是什么意思?BPM的优势及好处有哪些?

优秀

BPM

研发团队数字化转型实践

思码逸研发效能

研发效能 数字化

基于BiGRU和GAN的数据生成方法

行者AI

人工智能

实战模拟│微信 JSSDK 实现自定义分享、手机选图拍照、图片音频处理、地理位置、摇一摇等功能

经验分享 微信开发 签约计划第三季 8月月更 jssdk

浅谈大数据背景下数据库安全保障体系

阿炜小菜鸡

数据库

面试必问系列之最强源码分析,带你一步步弄清楚Spring如何解决循环依赖

小隐乐乐

Java 面试题 Spring5源码解析

未来小间距竞争的着力点在哪里

Dylan

LED显示屏 led显示屏厂家

直播app开发,是优化直播体验不得不关注的两大指标

开源直播系统源码

软件开发 直播系统源码 语音直播系统源码 直播app

TiFlash 存储层概览

TiDB 社区干货传送门

数据库 分布式数据库 TiDB

AntDB数据库亮相24届高速展,助力智慧高速创新应用

亚信AntDB数据库

AntDB 国产数据库 aisware antdb

面对营销难,有米云指出一条破局之路

ToB行业头条

OneFlow源码解析:Op、Kernel与解释器

OneFlow

深度学习 源码解析

浅谈游戏音效测试点

行者AI

游戏测试

今年最火爆的词:商业分析,看这一篇就够了!

博文视点Broadview

选择合适的 DevOps 工具,从理解 DevOps 开始

SoFlu软件机器人

开源一夏 | 五分钟带你上手ShardingJDBC实现MySQL分库分表

知识浅谈

开源 8月月更

30分钟成为Contributor|如何多方位参与OpenHarmony开源贡献?

OpenHarmony开发者

Open Harmony

使用设备树时对应的驱动编程

贾献华

8月月更

分布式一致性如何实现?- Raft 算法

晓双

分布式 微服务架构 raft 一致性算法 一致性

设计专业第一台笔记本 华硕灵耀Pro16 2022 新品首发超值入手

科技热闻

Git 不要只会 pull 和 push,学学这 5 条提高效率的命令(下)

CRMEB

暑气渐敛,8月让我们开源一夏!

InfoQ写作社区官方

开源 热门活动 8月月更

百图生科卓越开发者计划全面升级暨《计算免疫问题白皮书》发布

硬科技星球

直播系统聊天技术(八):vivo直播系统中IM消息模块的架构实践

JackJiang

网络编程 架构设计 即时通讯 IM

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