如何分步应用OpenRewrite Java 17迁移Recipe并单独提交变更?
OpenRewrite Java 17迁移分步提交的实用方案
针对你的需求,OpenRewrite目前没有官方的"交互模式"可以逐个应用Recipe并暂停提交,但可以通过以下几种便捷方式实现分步提交:
1. 拆分Recipe,单独执行子任务
原UpgradeToJava17集合包含多个子Recipe,你可以按逻辑分组(比如语法升级、依赖调整、API迁移),单独执行每个分组的Recipe,执行完一组就提交一次。
比如先执行语法升级类任务:
mvn rewrite:run -Drewrite.recipeArtifactCoordinates=org.openrewrite.recipe:rewrite-migrate-java:RELEASE -Drewrite.recipes=org.openrewrite.java.migrate.lang.MigrateToJava17Syntax
提交变更后,再执行依赖升级任务:
mvn rewrite:run -Drewrite.recipeArtifactCoordinates=org.openrewrite.recipe:rewrite-migrate-java:RELEASE -Drewrite.recipes=org.openrewrite.java.migrate.dependencies.UpgradeJavaDependencies
你可以在OpenRewrite的Java17迁移文档中找到所有子Recipe的清单,按需组合执行。
2. 用自定义配置文件分批启用Recipe
创建rewrite.yml配置文件,将所有需要执行的子Recipe列出来,每次只启用当前批次的任务,注释掉未执行的部分:
type: specs.openrewrite.org/v1beta/recipe name: your.org.Java17MigrationBatch displayName: Java 17 Migration Batch - Syntax Changes recipeList: - org.openrewrite.java.migrate.lang.MigrateToJava17Syntax # - org.openrewrite.java.migrate.dependencies.UpgradeJavaDependencies # - org.openrewrite.java.migrate.jdk.Jdk8ToJdk17
执行当前批次:
mvn rewrite:run -Drewrite.configLocation=rewrite.yml
提交后,修改配置文件启用下一批Recipe,重复执行即可。
3. 编写Shell脚本自动化分步处理
写一个简单的bash脚本,遍历所有子Recipe,自动执行并提示提交变更,省去手动重复操作的麻烦:
#!/bin/bash # 定义需要执行的子Recipe顺序 RECIPES=( "org.openrewrite.java.migrate.lang.MigrateToJava17Syntax" "org.openrewrite.java.migrate.dependencies.UpgradeJavaDependencies" "org.openrewrite.java.migrate.jdk.Jdk8ToJdk17" ) for recipe in "${RECIPES[@]}" do echo "=== 开始执行Recipe: $recipe ===" mvn rewrite:run -Drewrite.recipeArtifactCoordinates=org.openrewrite.recipe:rewrite-migrate-java:RELEASE -Drewrite.recipes="$recipe" # 检查是否有代码变更 if git diff --quiet; then echo "当前Recipe无变更,跳过提交" continue fi # 确认是否提交 read -p "是否提交当前变更? (输入y确认): " confirm if [[ "$confirm" == "y" ]]; then git add . git commit -m "Java 17迁移: 完成$recipe任务" echo "已提交变更" else echo "跳过提交,继续下一个Recipe" fi done
给脚本添加执行权限(chmod +x migrate-step.sh)后运行,即可自动完成逐个执行、确认提交的流程。
内容的提问来源于stack exchange,提问作者lmo
相关产品推荐
相关产品推荐

