Maven项目中不修改 pom.xml 状况下直接运行OpenRewrite的配方

在Java 的Maven项目中,可以在pom.xml 中配置插件用来运行OpenRewrite的Recipe,但是有一些场景是希望不修改pom.xml 文件就可以运行Recipe,比如:

  1. 因为不需要经常运行 OpenRewrite,所以不想在pom.xml 加入不常使用的插件配置
  2. 开发了一个专门用于运行Recipe的项目,用来对其它项目进行升级。

针对上面的场景,解决方法就是使用命令行的方式运行Recipe。

命令运行 OpenRewrite 的类别

根据配方的不同类型,可以将命令行运行配方的类型分为三种:

  1. 配方来自核心 Rewrite 库
  2. 配方来自其他库
  3. 自定义配方的运行

1. 核心 Rewrite 库的配方的命令行运行

什么是核心 Rewrite 库配方?

核心 Rewrite 库配方是位于下面GitHub 库的配方:
https://github.com/openrewrite/rewrite,

在这里插入图片描述

这些配方包括了Java升级,Maven,json, xml ,yaml 等配方。

以 rewrite-java 中的RemoveUnusedImports配方的执行为例,整个配方是移除Java类中没有用的Import 语句。

在这里插入图片描述

执行的命令如下:

mvn -U org.openrewrite.maven:rewrite-maven-plugin:run -Drewrite.activeRecipes=org.openrewrite.java.RemoveUnusedImports
  • -U参数是一个命令行选项,用于强制 Maven 更新快照(snapshot)依赖和发布版本(release)依赖的最新版本信息。具体来说,运行一个 Maven 命令并附带-U参数时,Maven 会在执行之前检查远程仓库中的依赖更新,并尝试下载最新的依赖版本信息(包括快照版本)。
  • -Drewrite.activeRecipes=org.openrewrite.java.RemoveUnusedImports是一个 Maven 属性设置,它告诉rewrite-maven-plugin插件要激活哪个配方(recipe)。

上面命令的作用就是: 强制更新依赖信息,并使用rewrite-maven-plugin插件的run目标来执行RemoveUnusedImports配方,从而移除 Java 代码中的未使用导入。

2. 配方来自其他库的命令行运行

其他库指的就是非核心 Rewrite 库的配方, 举例来说:
Oracle Java 在9之后的版本将 javax 的命名空间修改为jakarta, 再具体一点 之前调用位于 javax.mail 的发信相关的类的命名空间 ,在Java 9之后要修改为 jakarta.mail。
openrewrite 提供了转换包名的recipe: javaxmigrationtojakarta, 详细介绍地址:
https://docs.openrewrite.org/recipes/java/migrate/jakarta/javaxmigrationtojakarta
在这里插入图片描述

对于这种类型的配方的运行,在命令行需要指定配方的工件坐标。

这个配方的GitHub 的地址是:

https://github.com/openrewrite/rewrite-migrate-java/blob/main/src/main/resources/META-INF/rewrite/jakarta-ee-9.yml

在这里插入图片描述

使用 -Drewrite.recipeArtifactCoordinates 指定配方的坐标,完整的命令如下:

mvn -U org.openrewrite.maven:rewrite-maven-plugin:run \-Drewrite.recipeArtifactCoordinates=org.openrewrite.recipe:rewrite-migrate-java:LATEST \-Drewrite.activeRecipes=org.openrewrite.java.migrate.jakarta.JavaxMigrationToJakarta
  1. -Drewrite.recipeArtifactCoordinates=org.openrewrite.recipe:rewrite-migrate-java:LATEST:
    • -D参数用于设置系统属性。
    • rewrite.recipeArtifactCoordinatesrewrite-maven-plugin插件的一个配置选项,用于指定要使用的“食谱”的坐标。
    • org.openrewrite.recipe:rewrite-migrate-java:LATEST指定了食谱的 groupId、artifactId 和版本。LATEST是一个占位符,指示 Maven 使用可用的最新版本。这个食谱包含了一系列预定义的迁移规则,用于更新 Java 代码。
  2. -Drewrite.activeRecipes=org.openrewrite.java.migrate.jakarta.JavaxMigrationToJakarta:
    • 这个参数同样使用-D来设置系统属性。
    • rewrite.activeRecipes指定了要在当前构建中应用的特定迁移规则的列表。
    • org.openrewrite.java.migrate.jakarta.JavaxMigrationToJakarta是迁移规则的标识符,它指示插件应用将javax包迁移到jakarta包的规则。这是 Java EE 到 Jakarta EE 迁移的一部分,其中javax命名空间被迁移到jakarta命名空间。

3. 自定义配方的运行

自行开发的 Imperative recipes (命令式配方), 运行的命令 2 的情形是类似的,将自定义的配方发布到私有库或是本地库,通过指定工件坐标的方式来运行。

参数的传递

命令行的方式是无法传递参数的,如果要传递参数要怎么处理呢?

方式就是通过 rewrite.yml 文件

  1. 在项目根目录中创建或更新 rewrite.yml
    定义一个新配方,该配方包装了要运行的配方并指定了要使用的参数。
    示例(以 recipePkgRename
    配方为例):
type: specs.openrewrite.org/v1beta/recipe
name: com.osxm.recipePkgRename
recipeList:- org.openrewrite.java.ChangePackage:oldPackageName: org.old.package.namenewPackageName: org.new.package.name

运行配方:
使用 Maven 插件运行新定义的配方。
示例命令:

mvn -U org.openrewrite.maven:rewrite-maven-plugin:run -Drewrite.activeRecipes=com.osxm.recipePkgRename


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

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

相关文章

JVM实战—2.JVM内存设置与对象分配流转

大纲 1.JVM内存划分的原理细节 2.对象在JVM内存中如何分配如何流转 3.部署线上系统时如何设置JVM内存大小 4.如何设置JVM堆内存大小 5.如何设置JVM栈内存与永久代大小 6.问题汇总 1.JVM内存划分的原理细节 (1)背景引入 (2)大部分对象的存活周期都是极短的 (3)少数对象…

kong网关使用pre-function插件,改写接口的返回数据

一、背景 kong作为api网关,除了反向代理后端服务外,还可对接口进行预处理。 比如本文提及的一个小功能,根据http header某个字段的值,等于多少的时候,返回一个固定的报文。 使用到的kong插件是pre-function。 除了上…

计算机网络:IP地址相关知识总结

目录 一、IP地址的表现形式 1.1 十进制表示形式 1.2 二进制表示形式 1.3 转换示例介绍 二、IP地址的组成 2.1 网络ID 2.2 主机ID 2.3 示例 三、IP地址的分类 3.1 A类地址 3.2 B类地址 3.3 C类地址 3.4 D类地址 3.5 E类地址 四、常见的特殊IP地址 五、IP地址二进…

群晖Cloud Sync一键同步让数据管理变得简单

前言:在这个数字化爆炸的时代,数据管理和备份已经变得不可或缺。无论是个人用户还是企业,都需要一种既高效又可靠的方式来管理和备份分散在各种设备和云存储中的文件。而群晖的 **Cloud Sync** 套件正是为了解决这个问题而生。 Cloud Sync 是…

前缀树介绍

数风流人物,还看今朝! 前缀树 Trie(发音类似 "try")或者说 前缀树 是一种树形数据结构,用于高效地存储和检索字符串数据集中的键。这一数据结构有相当多的应用情景,例如自动补全和拼写检查。 前…

kkfileview代理配置,Vue对接kkfileview实现图片word、excel、pdf预览

kkfileview部署 官网:https://kkfileview.keking.cn/zh-cn/docs/production.html 这个是官网部署网址,这里推荐大家使用docker镜像部署,因为我是直接找运维部署的,所以这里我就不多说明了,主要说下nginx代理配置&am…

【数据可视化案列】白葡萄酒质量数据的EDA可视化分析

🧑 博主简介:曾任某智慧城市类企业算法总监,目前在美国市场的物流公司从事高级算法工程师一职,深耕人工智能领域,精通python数据挖掘、可视化、机器学习等,发表过AI相关的专利并多次在AI类比赛中获奖。CSDN…

数据结构之栈,队列,树

目录 一.栈 1.栈的概念及结构 2.栈的实现 3.实现讲解 1.初始化栈 2.销毁栈 3.压栈 4.出栈 5.返回栈顶元素 6.返回栈内元素个数 7.判断栈内是否为空 二.队列 1.队列的概念及结构 2.队列的实现 3.实现讲解 1.初始化队列 2.销毁队列 3.单个成员入队列 4.单个成员…

2、C#基于.net framework的应用开发实战编程 - 设计(二、三) - 编程手把手系列文章...

二、设计; 二.三、构建数据库; 此例子使用的是SQLite数据库,所以数据库工具用的SQLiteStudio x64,这个是SQLite专用的数据库设计管理工具,其它的数据库管理工具比如DBeaver的使用请见实战工具系列文章。 1、…

“信任构建”:网上购物商城的用户评价与信誉系统

2 相关技术 2.1 SSM框架介绍 本课题程序开发使用到的框架技术,英文名称缩写是SSM,在JavaWeb开发中使用的流行框架有SSH、SSM、SpringMVC等,作为一个课题程序采用SSH框架也可以,SSM框架也可以,SpringMVC也可以。SSH框架…

单点Redis所面临的问题及解决方法

1.数据丢失问题 大家可以设想一下这个场景,假如我们现在只有一个Redis,即单点Redis,我们在往Redis中添加数据的时候突然宕机了,那数据怎么办,如果是一条还好,我在敲一遍就行,那我敲了一万行都没…

计算机组成原理的学习笔记(8)-- 指令系统·其一 指令的组成以及数据寻址方式

学习笔记 前言 ​ 本文主要是对于b站尚硅谷的计算机组成原理的学习笔记,仅用于学习交流。 1. 指令 1.1 组成 操作码(Opcode):指指令中执行特定操作的部分。地址码:指令中用于指定操作数位置的部分。 1.2 扩展操作…

RAGFlow 基于深度文档理解构建的开源 RAG引擎 - 安装部署

RAGFlow 基于深度文档理解构建的开源 RAG引擎 - 安装部署 flyfish 1. 确保 vm.max_map_count ≥ 262144 这是指要调整Linux内核参数vm.max_map_count,以确保其值至少为262144。这个参数控制着进程可以映射的最大内存区域数量。对于某些应用程序(如Ela…

2024.2 ACM Explainability for Large Language Models: A Survey

Explainability for Large Language Models: A Survey | ACM Transactions on Intelligent Systems and Technology 问题 可解释性问题:大语言模型(LLMs)内部机制不透明,难以理解其决策过程,如在自然语言处理任务中&…

docker与docker-compose版本对应

1、说明 docker 和 docker-compose 是两个独立但又紧密相关的工具,docker用于管理docker容器,docker-compose用于编排多docker容器应用。了解它们之间的版本对应关系有助于确保在使用 docker-compose 时不会遇到兼容性问题。 2、docker与docker-compos…

【动态规划篇】步步带你深入解答成功AC最优包含问题(通俗易懂版)

本篇小鸡汤:待到苦尽甘来时,我给你讲讲来时路。 欢迎拜访:羑悻的小杀马特.-CSDN博客 本篇主题:解答洛谷的最优包含问题 制作日期:2024.12.23 隶属专栏:C/C题海汇总 ​​ 目录 本篇简介: 一动态…

Intent--组件通信

组件通信1 获取子活动的返回值 创建Activity时实现自动注册!【Activity必须要注册才能使用】 默认 LinearLayout 布局,注意 xml 中约束布局的使用; 若需要更改 线性布局 只需要将标签更改为 LinearLayout 即可,记得 设置线性布局…

table 表格转成 excell 导出

OK,功能非常简单,但是很实用啊! 依赖安装 这里我们需要安装两个依赖: xlsx 和 file-saver,就可以帮助我们实现功能了! npm i xlsx file-saver代码参考 导出方法 utils/index.js import * as XLSX from …

Vivado 编译(单核性能对比+高性能迷你主机+Ubuntu20.04/22.04安装与区别+20.04使用远程命令)

目录 1. 简介 2. 单核性能对比 2.1 PassMark 2.2 geekbench 2.3 CPU-7 2.4 选择 UM790 pro 3. Ubuntu 22.04 物理机 3.1 安装 Ubuntu 22.04 3.2 安装 Vitis 2022.1 3.3 缺点 4. Ubuntu 20.04 物理机 4.1 安装 Ubuntu 20.04 4.2 实用命令 4.2.1 SSH 保持活跃 4.2…

Java期末复习JDBC|网课笔记+校课总结

目录 1、概念 2、JDBC步骤 JDBC的基本步骤: 1、加载数据库驱动:通常使用Class类的forName()静态方法来加载驱动。 2、通过DriverManager获取数据库连接:需要传入3个参数:数据库URL、登陆数据库的用户名和密码。 3、通过Conn…