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

相关推荐

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

    2024-03-20 05:42:04       48 阅读
  2. 若依框架升级SpringBoot3

    2024-03-20 05:42:04       38 阅读
  3. springboot自动配置的条件注解使用

    2024-03-20 05:42:04       53 阅读
  4. 【C++】使用gtest单元测试框架写单元测试

    2024-03-20 05:42:04       23 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-20 05:42:04       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-20 05:42:04       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-20 05:42:04       87 阅读
  4. Python语言-面向对象

    2024-03-20 05:42:04       96 阅读

热门阅读

  1. 设计模式(行为型设计模式——解释器模式)

    2024-03-20 05:42:04       41 阅读
  2. 红与黑(c++题解)

    2024-03-20 05:42:04       38 阅读
  3. Spark on Yarn安装配置

    2024-03-20 05:42:04       40 阅读
  4. ESSBAE 数据挖掘

    2024-03-20 05:42:04       37 阅读
  5. 【iOS ARKit】触发器与触发域

    2024-03-20 05:42:04       38 阅读
  6. centos7安装redis-cluster集群

    2024-03-20 05:42:04       47 阅读
  7. C#实现FPGA自动烧录(Vivado)

    2024-03-20 05:42:04       42 阅读
  8. 使用verilog编写记忆拼图游戏设计及仿真

    2024-03-20 05:42:04       40 阅读
  9. HTML、XHTML和HTML5 的区别是什么?

    2024-03-20 05:42:04       38 阅读