Gradle复合构建中Groovy约定脚本找不到本地Java插件问题
问题根因
插件找不到的核心原因是复合构建的插件解析作用域隔离规则:
- 根目录
settings.gradle中pluginManagement块内配置的includeBuild('custom-java-plugin'),仅对根构建(含主工程、主工程直接引入的some-lib这类模块)的插件解析生效 groovy-plugin本身是独立的被包含构建(included build),拥有完全独立的配置解析上下文,不会自动继承根构建的pluginManagement规则,因此它内部的约定脚本解析custom-java-plugin时,无法匹配到对应的插件实现- 你在
pluginManagement块外重复编写的includeBuild('custom-java-plugin')属于无效配置:pluginManagement内的includeBuild专门用于插件ID映射解析,块外的includeBuild仅处理普通代码依赖的替换,不会参与插件解析流程,重复编写无法解决跨构建的插件引用问题
修复步骤
- 为
groovy-plugin配置独立的settings规则
在groovy-plugin目录下新建专属settings.gradle文件,写入以下配置,让该构建自身解析插件时可以定位到同项目下的custom-java-plugin:pluginManagement { repositories { mavenLocal() gradlePluginPortal() } includeBuild('../custom-java-plugin') } rootProject.name = 'groovy-plugin' - 清理根目录
settings.gradle的冗余配置
删除根配置中pluginManagement块外重复的includeBuild('custom-java-plugin'),同时把groovy-plugin的包含逻辑移到pluginManagement块内(确保主工程可以正常解析groovy约定插件),修正后参考配置如下:pluginManagement { repositories { mavenLocal() gradlePluginPortal() } includeBuild('custom-java-plugin') includeBuild('groovy-plugin') } rootProject.name = 'root' include('some-lib') - 校验
groovy-plugin的构建配置
确保groovy-plugin的build.gradle正确引入了预编译Groovy脚本插件所需的依赖,参考配置:plugins { id 'groovy-gradle-plugin' } repositories { mavenLocal() gradlePluginPortal() } // 如果你需要在约定脚本中直接引用custom-java-plugin里的类,可添加以下依赖 // dependencies { // implementation gradle.includedBuild('custom-java-plugin').project(':') // }
注意事项
- 所有通过
includeBuild引入的独立构建,都不会自动继承根构建的仓库、插件解析规则,跨构建的插件/依赖引用必须在使用方的配置中单独声明 - 预编译Groovy约定插件必须应用
groovy-gradle-plugin,否则src/main/groovy路径下的*.gradle文件不会被识别为可发布、可引用的插件,插件ID默认对应文件名去掉.gradle后缀的部分。
内容的提问来源于stack exchange,提问作者Adam Jarvis
相关产品推荐
相关产品推荐

