使用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

Migrate to Jakarta EE 10

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

Migrate Spring Boot properties to 3.2

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

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

  • 13
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

茫茫人海一粒沙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值