1 - Rewrite介绍

OpenRewrite支持大规模分布式源代码重构,用于框架迁移、漏洞补丁和API迁移。

https://docs.openrewrite.org/

大规模自动化源代码重构

OpenRewrite支持大规模分布式源代码重构,用于框架迁移、漏洞补丁和API迁移。虽然最初的重点是 Java 语言,但 OpenRewrite 一直在扩大语言和框架的覆盖范围.

语义代码搜索和转换

OpenRewrite 项目是一个语义代码搜索以及 Java 和其他源代码的转换生态系统。它由一个预打包的重构配方平台组成,用于常见的框架迁移和风格一致性任务。它还允许您定义自定义配方以实现广泛的源代码转换。

OpenRewrite 有什么作用?

OpenRewrite 的工作原理是对无损语义树(LST) 表示您的源代码,并将修改后的树打印回源代码。然后,您可以查看代码中的更改并提交。对 LST 的修改在游客和访客被聚合成配方(recepes). OpenRewrite 配方对遵循原始格式的源代码进行微创更改。

例如,如果要在所有测试文件中一致地使用静态导入,而不是手动执行此操作,则可以使用 OpenRewrite 提供的 UseStaticImport 访问器。应用于下面的文件,您可以看到这生成的更改。

// Before OpenRewrite
import org.junit.Assert;
...

Assert.assertTrue(condition);
// After OpenRewrite
import static org.junit.Assert.assertTrue;
...

assertTrue(condition);

后续步骤

2 - 在不修改构建的情况下在 Maven 项目上运行 Rewrite

在不修改构建的情况下在 Maven 项目上运行 Rewrite

https://docs.openrewrite.org/running-recipes/running-rewrite-on-a-maven-project-without-modifying-the-build

在本教程中,我们将应用 Rewrite recipe (配方)添加到使用 Maven 构建的源代码存储库中,而无需修改构建本身。根据配方是否具有配置参数,此说明略有不同。请注意,您需要先安装 Maven 以运行 shell 命令。

在没有配置参数的情况下运行配方

如果您尝试运行的配方没有任何必需的配置参数,则可以通过执行 shell 命令来运行配方。

我们 recipe 文档 包括针对任何没有配置参数的配方运行的特定 shell 命令。您可能会发现复制并运行提供的命令比手动创建它更容易。

如果配方来自core Rewrite库(如删除未使用的导入),然后您可以运行以下命令并将 org.openrewrite.java.RemoveUnusedImports 替换为要运行的配方的路径:

mvn -U org.openrewrite.maven:rewrite-maven-plugin:run -Drewrite.activeRecipes=org.openrewrite.java.RemoveUnusedImports

如果配方来自不同的库(例如迁移到 Jakarta EE 9),然后您可以运行以下命令并将 org.openrewrite.recipe:rewrite-migrate-java:LATEST 替换为配方的工件,并将 org.openrewrite.java.migrate.jakarta.JavaxMigrationToJakarta 替换为要运行的配方的路径:

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. 在项目根目录中创建或更新 rewrite.yml 文件.在那里,您需要创建一个新配方,该配方包装要运行的配方并指定要使用的参数。

  2. 运行一个 shell 命令,该命令执行您在步骤 1 中定义的新配方。

例如,如果你想运行 ChangePackage 配方 若要将 org.old.package.name 更改为 org.new.package.name,需要创建一个如下所示的 rewrite.yml 文件:

---
type: specs.openrewrite.org/v1beta/recipe
name: com.yourorg.NameYouDefine
recipeList:
  - org.openrewrite.java.ChangePackage:
      oldPackageName: org.old.package.name
      newPackageName: org.new.package.name

然后,您可以通过执行以下 shell 命令来运行该配方:

mvn -U org.openrewrite.maven:rewrite-maven-plugin:run \
  -Drewrite.activeRecipes=com.yourorg.NameYouDefine