OpenRewrite多模块Maven项目YAML配方位置及调用问题排查
多模块Maven项目中Rewrite YAML配方的正确存放位置
- 配方所在模块需为标准Java Jar模块:项目A的
functional模块不能是<packaging>pom</packaging>类型,必须使用默认的jar打包类型,确保资源文件能被正确打包进Jar包。 - 配方文件路径必须严格遵循
src/main/resources/META-INF/rewrite/Example.yml,你当前的路径是正确的,但需确认Jar包解压后该文件确实存在且内容无格式错误。 - 项目B必须显式在rewrite-maven-plugin的依赖中声明项目A的
functional模块:Rewrite插件只会扫描自身依赖中的配方文件,仅在项目B全局依赖中声明无法被插件识别。 - 确保YAML文件中的
name字段与激活的配方ID完全一致,示例如下:
name: xxxxx.functional.Example recipeList: # 此处填写具体重构步骤
rewrite:discover命令的调试建议
- 验证依赖传递:执行
mvn dependency:tree,搜索项目A的functional模块,确认项目B的rewrite-maven-plugin依赖中包含该模块,且版本与已安装的一致。 - 开启调试日志执行命令:
mvn rewrite:discover -X,重点关注以下日志内容:- 插件加载的依赖Jar列表,确认项目A的
functionalJar在其中 - 扫描
META-INF/rewrite/目录的日志,查看是否检测到Example.yml - 任何与配方加载相关的错误提示(如YAML解析失败、配方ID冲突)
- 插件加载的依赖Jar列表,确认项目A的
- 直接检查本地仓库Jar包:找到项目A
functional模块在本地Maven仓库的Jar文件,解压后确认META-INF/rewrite/Example.yml存在且内容正确。 - 确认插件配置正确性:检查项目B的rewrite-maven-plugin配置,确保
<activeRecipes>中的配方ID与YAML文件的name完全匹配,且依赖声明正确,示例配置如下:
<plugin> <groupId>org.openrewrite.maven</groupId> <artifactId>rewrite-maven-plugin</artifactId> <version>4.44.0</version> <configuration> <activeRecipes> <recipe>xxxxx.functional.Example</recipe> </activeRecipes> </configuration> <dependencies> <dependency> <groupId>你的项目A groupId</groupId> <artifactId>functional</artifactId> <version>对应版本号</version> </dependency> </dependencies> </plugin>
- 重新安装项目A:在项目A根目录执行
mvn clean install,确保最新的Jar包包含配方文件并同步到本地仓库。
内容的提问来源于stack exchange,提问作者Christopher Helck
相关产品推荐
相关产品推荐

