如何在自定义Gradle发行版中应用foojay-resolver-convention插件?
全局在自定义Gradle发行版中应用Foojay工具链约定插件
问题背景
企业内数百个基于Gradle 7.6.2的项目依赖toolchains自动下载SDK;升级到Gradle 8.3自定义发行版后,Gradle 8不再支持无仓库配置的自动工具链下载,需通过org.gradle.toolchains.foojay-resolver-convention插件实现功能兼容。希望通过自定义发行版中的init.gradle全局应用该插件,避免各团队手动修改数百个settings.gradle文件。
已将foojay-resolver-0.7.0.jar放入Gradle发行版的gradle-8.3/lib/plugins目录,但在init.gradle中应用插件时遇到报错:
- 通过类名应用时,报错
Could not get unknown property 'org' for build of type org.gradle.invocation.DefaultGradle - 通过插件ID应用时,报错
Plugin with id 'org.gradle.toolchains.foojay-resolver-convention' not found
解决方案
方案1:通过插件类全限定名应用(推荐)
报错原因是Groovy语法解析错误:直接写类名会被识别为变量引用,需将类全限定名用单引号包裹作为字符串传入apply方法。
修改后的init.gradle代码:
settingsEvaluated { settings -> settings.pluginManagement { repositories { maven { url repoUrl } } } // 用单引号包裹类全限定名,避免Groovy解析错误 settings.apply plugin: 'org.gradle.toolchains.foojay.FoojayToolchainsConventionPlugin' }
方案2:通过插件ID应用(需配置flatDir仓库)
Gradle在settings阶段默认不会扫描本地lib/plugins目录的插件ID,需在pluginManagement中添加flatDir仓库指向插件所在目录,让Gradle能识别插件ID。
修改后的init.gradle代码:
settingsEvaluated { settings -> settings.pluginManagement { repositories { // 添加flatDir仓库指向Gradle发行版的插件目录 flatDir { dirs new File(settings.gradle.gradleHomeDir, 'lib/plugins') } maven { url repoUrl } } } settings.apply plugin: 'org.gradle.toolchains.foojay-resolver-convention' }
验证方法
运行任意项目的Gradle任务(如gradle tasks),或触发工具链下载操作,确认插件已生效且无报错。
内容的提问来源于stack exchange,提问作者paskos
相关产品推荐
相关产品推荐

