这是本节的多页打印视图。 点击此处打印.

返回本页常规视图.

OpenRewrite

使用OpenRewrite工具进行java升级

1 - 迁移到Java17

迁移到Java17

https://docs.openrewrite.org/running-recipes/popular-recipe-guides/migrate-to-java-17

在本教程中,我们将使用 OpenRewrite 从 Java 8 自动迁移到 Java 17。将旧代码库升级到 Java 17 可能是一项艰巨而耗时的任务。作为开发人员,您可以使用 OpenRewrite 快速解决升级过程中遇到的最常见问题。

本配方涵盖以下主题:

  • 使用任何 Java EE 规范的应用程序都将把这些依赖关系迁移到 Jakarta EE 8。此外,迁移到 Jakarta EE 8 还将为那些对 Jakarta EE API 有传递依赖关系的项目添加显式运行时依赖关系。目前,只支持基于 Maven 的构建文件。

  • Java 早期版本中任何已废弃的 API(具有明确定义的迁移路径)都将自动应用到应用程序的源代码中。本秘诀中包含的补救措施最初是通过一个名为 Jdeprscan 的构建插件识别出来的。

  • 当应用程序尝试使用未通过模块系统公开导出的 API 时,将记录非法反射访问警告。如果众所周知的第三方库提供了符合 Java 模块系统的版本,本教程将对其进行升级。

配置示例

在项目中加入 OpenRewrite 插件并依赖 rewrite-migrate-java,即可应用 Java 17 迁移配方:

<build>
  <plugins>
    <plugin>
      <groupId>org.openrewrite.maven</groupId>
      <artifactId>rewrite-maven-plugin</artifactId>
      <version>5.13.0</version>
      <configuration>
        <activeRecipes>
          <recipe>org.openrewrite.java.migrate.UpgradeToJava17</recipe>
        </activeRecipes>
      </configuration>
      <dependencies>
        <dependency>
          <groupId>org.openrewrite.recipe</groupId>
          <artifactId>rewrite-migrate-java</artifactId>
          <version>2.3.0</version>
        </dependency>
      </dependencies>
    </plugin>
  </plugins>
</build>

这时,你就可以运行 mvn rewrite:rungradlew rewriteRun 来执行迁移了。运行迁移后,您可以使用 git diff(或类似工具)检查迁移结果,手动修复无法自动迁移的内容,然后提交迁移结果。

迁移前后

有关此配方所做更改的完整列表,请参阅 Java 11 和 Java 17 的参考页面。如果您有本项目尚未涵盖的特定用例,请联系我们的团队!

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