EMT4J—— Java 版本迁移检测工具

news2024/9/22 13:29:55

最近因为工作需要研究了emt4j,这里写一篇文章记录一下。

非专业Java er,有不同意见欢迎评论区分享。

目录

EMT4J是什么?

如何使用?

Command-line

Java Agent

简单的源码分析

目录分析

规则解析

参考资料


EMT4J是什么?

Eclipse Migration Toolkit for Java (EMT4J)是阿里开发的一款用于Java版本迁移的检测工具,目前已经捐献(开源)给Eclipse社区。

工具支持从 JDK 8 升级到 JDK 11&17 的分析。

github地址      EMT4J在Eclipse的地址

如何使用?

目前有以下三种使用方案:

  1. Java Agent

  2. Command-line

  3. Maven Plugin

没有用过第三种,所以这里只介绍第二种和第一种的用法。

我们先去github的release里面下载最新的v0.8.0的zip,然后解压。

使用的系统环境是Ubuntu2004。

Command-line

解压出来bin目录中有一个名为`analysis`的脚本,Command-line就是用这个脚本进行检测。

这个脚本可以用于检测class,jar包,以及目录

这里我们以检测class:DeprecatedAPIExample.class,从8升级到17版本为例:

bash ../emt4j-0.8/bin/analysis.sh -f 8 -t 17 -o report.html DeprecatedAPIExample.class

检测结果有支持HTML、TXT和JSON三种格式,我们这里测试的是html格式。

ps:检测结果的title我自己改过,和正常测出来的结果不一样。

Java Agent

这里还是检测DeprecatedAPIExample.class,从8升级到17版本,测试语句如下:

java -javaagent:./emt4j-0.8/lib/agent/emt4j-agent-jdk8-0.8.jar=to=17,file=jdk8to17.dat  DeprecatedAPIExample

会生成jdk8to17.dat,需要再进行一步处理:

bash emt4j-0.8/bin/analysis.sh -p txt -o report.txt jdk8to17.dat

这样我们就获得了检测结果report.txt。

简单的源码分析

目录分析

下载EMT4J的源码之后,解压可以看到如下几个目录,这就是项目的几个主要模块。

目录名功能
binCommand-line检测的脚本
agentJava Agent检测的相关代码
assembly项目编译结果的存放处
commonCommand-line检测的相关代码+资源文件
pluginMaven Plugin检测的相关代码
test自测的代码,用户用不到
jenkins一些项目配置

规则解析

迁移的规则是以xml的格式存在的,比如8到11的迁移规则存在于以下路径:

/emt4j/emt4j-common/src/main/resources/default/rule/8to11/rule.xml

这里选择getFirstDayOfWeek来解析一下规则的构成;

属性功能
desc规则描述
type本来是用来定位规则的实现在哪个类。
不过这个xml里有好多type="whole-class"的,所以具体的实现不通过whole-class来定位
mvel2-rule-file规则的配置文件名,一般后缀为cfg。
在项目里“如何检测”和“检测哪些内容”一般是分开的,“检测哪些内容”是通过cfg配置文件决定的。
static-analysis-rule实现“如何检查”的类,也是实际的规则名
result-code检查结果的配置文件,像这个文件里对应的是CLDR_CLDR_FIRSTDAY_OF_WEEK.properties和CLDR_CLDR_FIRSTDAY_OF_WEEK_zh.properties。
如果你用中文系统,最后检测的结果会显示_zh.properties的内容。

support-modes

支持的检测模式。
class支持表示Command-line和plugin检测,agent支持表示Java Agent检测。
可以同时支持这两种检测,检测方法不能共用的话要写新的。 

priority

问题错误等级,从p1到p4。
输出检测结果的时候可以指定输出哪个等级的错误。

以上属性不是每个规则都有的,一定有的是desc,type,result-code,mvel2-rule-file或者class-list-file,support-modes,priority。

参考资料

一个简化 Java 应用升级的开源项目:EMT4J-CSDN博客

【精选】当老板让我从 Java8 升到 Java11_jdk1.8升级成jdk11_heern的博客-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1135032.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

nginx只允许英文名的文件下载,中文名就是找不到文件

本文主要向大家介绍了Linux运维知识之linux下nginx不支持中文URL路径的解决方案,通过具体的内容向大家展现,希望对大家学习Linux运维知识有所帮助。 1、确定你的系统是UTF编码 [rootlocalhost ~]# echo $LAGN en_US.UTF-8 2、nginx配置文件里默认编码…

python爬虫之正则表达式实战----爬取图片

文章目录 1. 图片爬取流程分析2. 爬取家常菜图片 1. 图片爬取流程分析 先获取网址,URL:https://www.xiachufang.com/category/40076/ 定位想要爬取的内容使用正则表达式爬取导入模块指定URLUA伪装(模拟浏览器)发起请求&#xff0…

【springcloud-config】配置中心客户端导入依赖spring-cloud-config-server后,maven一直爆红问题解决

问题描述 配置中心客户端导入了 spring-cloud-config-server 后&#xff0c;导入依赖爆红&#xff1b; 解决办法&#xff1a; 参考官网中文文档&#xff1a;spring-cloud -config 配置中心 中文文档 补充导入 spring-config-starter-config 配置即可 <!--springcloud-c…

Transformer英语-法语机器翻译实例

依照Transformer结构来实例化编码器&#xff0d;解码器模型。在这里&#xff0c;指定Transformer编码器和解码器都是2层&#xff0c;都使用4头注意力。为了进行序列到序列的学习&#xff0c;我们在英语-法语机器翻译数据集上训练Transformer模型&#xff0c;如图11.2所示。 da…

【设计模式】第5节:创建型模式之“简单工厂、工厂方法和抽象工厂模式”

一、简单工厂模式 ProductFactory是创建商品的工厂&#xff0c;商品Product可以实现Product接口中的一些功能。 当需要根据入参的不同生成多种不同的产品时&#xff0c;可以将生成不同产品的逻辑剥离出来&#xff0c;使用产品工厂创建不同的产品。 二、工厂方法 ConcreteFact…

知识点滴 - Email地址不区分大小写

电子邮件地址本身对字符大小写不敏感。这意味着实际的电子邮件地址&#xff0c;如 "exampleemail.com"&#xff0c;并不区分字母的大小写。无论你输入的是大写字母还是小写字母&#xff0c;它仍然会到达同一个电子邮件账户。例如&#xff0c;如果您的电子邮件地址是 …

信创生态丨九州未来与超聚变完成兼容性互认证

近日&#xff0c;九州未来与超聚变积极开展了兼容性适配工作&#xff0c;并完成产品兼容性互认证。双方兼容性测试基于Intel64、鲲鹏架构完成&#xff0c;测试结果显示&#xff1a;九州未来Animbus IaaS V8可基于超聚变FusionOS 23服务器操作系统安全稳定运行&#xff0c;产品相…

并发编程-线程池ForkJoinPool工作原理分析

由一道算法题引发的思考 算法题&#xff1a; 如何充分利用多核CPU的性能&#xff0c;快速 对一个2千万大小的数组进行排序&#xff1f; 分解 求解 合并 这道算法题可以拆解来看&#xff1a; 1&#xff09;首先这是一道排序的算法题&#xff0c;而且是需要使用高效的排序算法…

[量化投资-学习笔记003]Python+TDengine从零开始搭建量化分析平台-Grafana画K线图

在前面两个笔记&#xff1a; PythonTDengine从零开始搭建量化分析平台-数据存储 PythonTDengine从零开始搭建量化分析平台-MA均线的多种实现方式 中有提到使用 Grafana 画图&#xff0c;不过画的都是均线。除了均线&#xff0c;Grafana 非常人性的提供离 K线图模块。 配置简单…

深度学习 anaconda 安装问题

配置anaconda 在官网下载匹配版本的anaconda&#xff08;官网下载可能时间比较长&#xff09;&#xff0c;可以选择清华镜像。 安装过程默认即可&#xff0c;或者根据情况进行修改。 旧版本是可以在安装的时候勾选添加路径到环境变量中的&#xff0c;但是我安装的是2023.9月…

代码随想录算法训练营第三十三天丨 贪心算法part04

860.柠檬水找零 思路 这道题目刚一看&#xff0c;可能会有点懵&#xff0c;这要怎么找零才能保证完成全部账单的找零呢&#xff1f; 但仔细一琢磨就会发现&#xff0c;可供我们做判断的空间非常少&#xff01; 只需要维护三种金额的数量&#xff0c;5&#xff0c;10和20。 …

计算机中了mallox勒索病毒怎么办,勒索病毒解密,数据恢复

最近一段时间&#xff0c;云天数据恢复中心陆续收到很多企业的求助&#xff0c;企业的计算机服务器遭到了mallox勒索病毒攻击&#xff0c;导致企业的数据库无法正常使用&#xff0c;严重影响了企业的正常生产生活&#xff0c;为此&#xff0c;云天数据恢复中心的工程师通过对此…

【深度学习】使用Pytorch实现的用于时间序列预测的各种深度学习模型类

深度学习模型类 简介按滑动时间窗口切割数据集模型类CNNGRULSTMMLPRNNTCNTransformer 简介 本文所定义模型类的输入数据的形状shape统一为 [batch_size, time_step&#xff0c;n_features]&#xff0c;batch_size为批次大小&#xff0c;time_step为时间步长&#xff0c;n_feat…

Promise及相关知识细学

学习关键语句: Promise promise学习 promise.all promise.race promise.resolve 1. 写在前面 promise 是前端绕不开的东西 , 所以我们一定要好好学习 , 写这篇文章的目的是加深对 promise 的学习和使用程度 2. 开始 2.1 准备 首先创建一个文件夹 , 里面新建一个 index.htm…

Navicat 16 支持 Redis Cluster 集群模式 | 新功能 √

Redis Cluster 适用于需要处理大量数据和高并发访问&#xff0c;并且需要保证高可用性和可扩展性的场景。它在国内许多行业中都得到了广泛的应用。为了满足广大专业用户的需求&#xff0c;Navicat 16 再次升级&#xff0c;新增 Redis Cluster 功能&#xff0c;为Redis 用户带来…

FreeRTOS 计数型信号量 详解

目录 什么是计数型信号量&#xff1f; 计数型信号量相关 API 函数 1. 创建计数型信号量 2. 释放二值信号量 3. 获取二值信号量 计数型信号量实操 什么是计数型信号量&#xff1f; 计数型信号量相当于队列长度大于1 的队列&#xff0c;因此计数型信号量能够容纳多个资源&a…

探索JavaScript ES6+新特性

JavaScript是一门十分流行的编程语言&#xff0c;它不断发展演变以适应现代Web开发需求。ES6&#xff08;也称为ECMAScript 2015&#xff09;是JavaScript的第六个版本&#xff0c;引入了许多令人兴奋的新特性和语法糖。本文将介绍一些ES6中最有趣和实用的特性。 箭头函数 箭…

【人脸检测 FPS 1000+】ubuntu下libfacedetection tensorrt部署

TensorRT系列之 Windows10下yolov8 tensorrt模型加速部署 TensorRT系列之 Linux下 yolov8 tensorrt模型加速部署 TensorRT系列之 Linux下 yolov7 tensorrt模型加速部署 TensorRT系列之 Linux下 yolov6 tensorrt模型加速部署 TensorRT系列之 Linux下 yolov5 tensorrt模型加速…

解决问题:Expected one result (or null) to be returned by selectOne(),but found: 2]

在做一次数据迁移后&#xff0c;系统登录失败&#xff0c;日志报错&#xff1a; 原因&#xff1a;在数据迁移账号时&#xff0c;用户账号有两个相同的账号&#xff0c;所以导致登录失败。

成功项目经理总结的20个项目管理经验

大家好&#xff0c;我是老原。 有人说&#xff1a;项目管理是变理想为现实&#xff0c;化抽象为具体的一门科学和艺术。 这是对项目管理的一种精辟总结。项目管理专业的方法和知识能教会我们如何快捷、科学、艺术地做事。 因为它除了交付项目&#xff0c;更能管理人生。 毕…