当前位置: 首页 > news >正文

使用OpenRewrite自动做框架升级比如Spring Boot

简介

OpenRewrite 用于大规模自动化源代码重构

OpenRewrite 是一个源代码自动重构生态系统,使开发人员能够有效消除其存储库中的技术债务。

它由一个自动重构引擎组成,该引擎运行预先打包的开源重构方案,用于常见框架迁移、安全修复和风格一致性任务,从而将您的编码工作从几小时或几天减少到几分钟。 OpenRewrite Gradle 插件和 OpenRewrite Maven 插件等构建工具插件可帮助您一次在一个存储库上运行这些配方。

OpenRewrite使用方式有五种

1.利用Maven Plugin

使用 OpenRewrite 等第三方工具将现有的 Spring Boot 应用程序迁移到 Spring Boot 3。

<plugin><groupId>org.openrewrite.maven</groupId><artifactId>rewrite-maven-plugin</artifactId><version>5.25.0</version><configuration><activeRecipes><recipe>org.openrewrite.java.spring.boot3.UpgradeSpringBoot_3_0</recipe></activeRecipes></configuration><dependencies><dependency><groupId>org.openrewrite.recipe</groupId><artifactId>rewrite-spring</artifactId><version>5.5.0</version></dependency></dependencies>
</plugin>

这里,我们通过recipe属性指定升级到Spring Boot版本3。 OpenRewrite 有很多用于升级 Java 项目的方法可供选择。

最后,让我们运行迁移命令:

$ mvn rewrite:run

运行结果如下:

[INFO] Running recipe(s)...
[WARNING] Deleted file src/main/resources/META-INF/spring.factories by:
[WARNING]     org.openrewrite.java.spring.boot3.UpgradeSpringBoot_3_0
[WARNING]         org.openrewrite.hibernate.MigrateToHibernate61
[WARNING]             org.openrewrite.hibernate.MigrateToHypersistenceUtilsHibernate6.0
[WARNING]                 org.openrewrite.java.ChangePackage: {oldPackageName=com.vladmihalcea, newPackageName=io.hypersistence.utils, recursive=true}
[WARNING] Changes have been made to src/main/java/org/example/MyConnectionErrorConfiguration.java by:
[WARNING]     org.openrewrite.java.spring.boot3.UpgradeSpringBoot_3_0
[WARNING]         org.openrewrite.java.spring.boot2.MoveAutoConfigurationToImportsFile
[WARNING] Please review and commit the results.

上面的命令将项目迁移到 Spring Boot 3,包括安全配置。通过执行 mvn rewrite:run 您可以为您的代码库运行 OpenRewrite。完成后,您将拥有一组更改的文件,如果您对结果满意,则可以查看并提交这些文件。

如果您不想实际更改源代码,还可以使用 mvn rewrite:dryrun 命令 - 这只会为所有更改生成一组差异。OpenRewrite将生成补丁文件target/rewrite/rewrite.patch,我们可以使用它来查看更改。对于 Maven pom.xml 它将生成以下统一差异:

为了使用 OpenRewrite 修复我们的编码错误并执行 Spring Boot 升级,我们需要将其配置为同时使用 CommonStaticAnalysis 和UpgradeSpringBoot_3_0

<activeRecipes><activeRecipe>org.openrewrite.java.cleanup.CommonStaticAnalysis</activeRecipe><activeRecipe>org.openrewrite.java.spring.boot3.UpgradeSpringBoot_3_0</activeRecipe></activeRecipes>

一旦我们完成了应用程序的迁移,我们就可以让 OpenRewrite Maven 插件从 pom.xml 中删除自身。

mvn rewrite:remove

2. 直接运行maven命令

Migrate to Spring Boot 3.0

mvn -U org.openrewrite.maven:rewrite-maven-plugin:run -Drewrite.recipeArtifactCoordinates=org.openrewrite.recipe:rewrite-spring:RELEASE -Drewrite.activeRecipes=org.openrewrite.java.spring.boot3.UpgradeSpringBoot_3_0

Migrate to jdk17

mvn -U org.openrewrite.maven:rewrite-maven-plugin:run -Drewrite.recipeArtifactCoordinates=org.openrewrite.recipe:rewrite-migrate-java:RELEASE -Drewrite.activeRecipes=org.openrewrite.java.migrate.UpgradeToJava17

3. Gradle

把下面代码加入build.gradle 文件。 执行gradle rewriteRun

plugins {id("org.openrewrite.rewrite") version("6.9.0")
}rewrite {activeRecipe("org.openrewrite.java.spring.boot3.UpgradeSpringBoot_3_0")
}repositories {mavenCentral()
}dependencies {rewrite("org.openrewrite.recipe:rewrite-spring:5.6.0")
}

4. init.gradle

在项目的根目录中创建一个名为 init.gradle 的文件。
initscript {repositories {maven { url "https://plugins.gradle.org/m2" }}dependencies { classpath("org.openrewrite:plugin:6.9.0") }
}
rootProject {plugins.apply(org.openrewrite.gradle.RewritePlugin)dependencies {rewrite("org.openrewrite.recipe:rewrite-spring:5.6.0")}rewrite {activeRecipe("org.openrewrite.java.spring.boot3.UpgradeSpringBoot_3_0")}afterEvaluate {if (repositories.isEmpty()) {repositories {mavenCentral()}}}
}

运行命令

gradle --init-script init.gradle rewriteRun

5 Moderne CLI

mod run . --recipe UpgradeSpringBoot_3_0

参考资料

Migrate to Spring Boot 3.1 | OpenRewrite by Moderne

相关文章:

  • android studio 安装lombok插件
  • 软件工程-第7章 面向对象方法RUP
  • 【CNN轻量化】RepViT: Revisiting Mobile CNN From ViT Perspective
  • Webpack的构建流程
  • linux安装rabbitmq
  • Java-Java基础学习(2)-网络编程-TCP-UDP
  • 【FPGA】摄像头模块OV5640
  • 理解C#和.NET的应用模型
  • discuz、ecshop、帝国cms部署https(ssl)后会员无法登录
  • UGUI源码分析与研究3-扩展UGUI实现自定义UI组件
  • 计算机网络:数据交换方式
  • 研究人员发现 OpenAI ChatGPT、Google Gemini 的漏洞
  • GitHub Copilot+ESP开发实战-串口
  • Spire.PDF for .NET【文档操作】演示:将PDF拆分为多个PDF文件
  • Java(0)---调用C++动态链接库-windows--JNIDemo
  • 【从零开始安装kubernetes-1.7.3】2.flannel、docker以及Harbor的配置以及作用
  • 【前端学习】-粗谈选择器
  • Centos6.8 使用rpm安装mysql5.7
  • Iterator 和 for...of 循环
  • java8-模拟hadoop
  • js ES6 求数组的交集,并集,还有差集
  • js操作时间(持续更新)
  • js中forEach回调同异步问题
  • Magento 1.x 中文订单打印乱码
  • SpringCloud集成分布式事务LCN (一)
  • 给初学者:JavaScript 中数组操作注意点
  • 开放才能进步!Angular和Wijmo一起走过的日子
  • 前端性能优化--懒加载和预加载
  • 三栏布局总结
  • Salesforce和SAP Netweaver里数据库表的元数据设计
  • ​渐进式Web应用PWA的未来
  • ​人工智能书单(数学基础篇)
  • ​一帧图像的Android之旅 :应用的首个绘制请求
  • # 学号 2017-2018-20172309 《程序设计与数据结构》实验三报告
  • (libusb) usb口自动刷新
  • (超简单)使用vuepress搭建自己的博客并部署到github pages上
  • (二)什么是Vite——Vite 和 Webpack 区别(冷启动)
  • (附源码)ssm旅游企业财务管理系统 毕业设计 102100
  • (附源码)计算机毕业设计ssm本地美食推荐平台
  • (附源码)计算机毕业设计ssm电影分享网站
  • (学习日记)2024.03.25:UCOSIII第二十二节:系统启动流程详解
  • (一)【Jmeter】JDK及Jmeter的安装部署及简单配置
  • (一)spring cloud微服务分布式云架构 - Spring Cloud简介
  • (原創) 如何安裝Linux版本的Quartus II? (SOC) (Quartus II) (Linux) (RedHat) (VirtualBox)
  • (转)memcache、redis缓存
  • ****** 二十三 ******、软设笔记【数据库】-数据操作-常用关系操作、关系运算
  • .\OBJ\test1.axf: Error: L6230W: Ignoring --entry command. Cannot find argumen 'Reset_Handler'
  • .htaccess 强制https 单独排除某个目录
  • .net framwork4.6操作MySQL报错Character set ‘utf8mb3‘ is not supported 解决方法
  • .NET Windows:删除文件夹后立即判断,有可能依然存在
  • .net下简单快捷的数值高低位切换
  • .NET与java的MVC模式(2):struts2核心工作流程与原理
  • .Net转Java自学之路—SpringMVC框架篇六(异常处理)
  • 。Net下Windows服务程序开发疑惑
  • @Autowired标签与 @Resource标签 的区别