如何在Gradle约定插件中覆盖插件依赖版本
如何在Gradle约定插件中覆盖Freefair Lombok插件的依赖版本
我目前在使用Gradle官方的约定插件方案,在约定插件里引入了io.freefair.gradle:lombok-plugin:6.5.1,但需要把它默认依赖的org.projectlombok:lombok:1.18.24替换成1.18.22。
我试过两种配置方式,但都没生效:
尝试1:在约定插件的构建脚本中添加依赖
buildscript { dependencies { classpath 'org.projectlombok:lombok:1.18.22' } } plugins { id 'groovy-gradle-plugin' } ... dependencies { implementation 'io.freefair.gradle:lombok-plugin:6.5.1' ... implementation 'org.projectlombok:lombok:1.18.22' }
实际构建时依然使用1.18.24版本。
尝试2:在项目主构建脚本中添加配置
buildscript { dependencies { classpath 'org.projectlombok:lombok:1.18.22' } } plugins { id 'billforward.java-conventions' }
结果还是没切换到1.18.22版本。
我要解决的底层问题有两个:
- Freefair的lombok-plugin 6.5版本修复了一个已知问题
- Lombok 1.18.24出现了故障,必须回退到1.18.22才能正常使用
可行的版本覆盖方案
方案1:用依赖约束强制锁定版本
在约定插件的构建脚本中,通过constraints强制指定Lombok版本,确保所有依赖路径都使用该版本:
dependencies { implementation 'io.freefair.gradle:lombok-plugin:6.5.1' constraints { implementation('org.projectlombok:lombok') { version '1.18.22' because '1.18.24存在功能故障,需回退至稳定版本' } // 同时锁定lombok-gradle-plugin版本 implementation('org.projectlombok:lombok-gradle-plugin') { version '1.18.22' } } }
方案2:直接配置Freefair插件的Lombok版本
Freefair的Lombok插件支持直接指定依赖版本,在约定插件的实现脚本(比如src/main/groovy/com/example/java-conventions.gradle)中添加:
plugins { id 'io.freefair.lombok' version '6.5.1' } lombok { version = '1.18.22' }
方案3:在根目录settings.gradle中全局锁定版本
通过Gradle的依赖解析管理全局强制Lombok版本:
dependencyResolutionManagement { versionCatalogs { libs { version('lombok', '1.18.22') } } components { all { if (it.group == 'org.projectlombok') { version { strictly libs.versions.lombok.get() } } } } }
为什么之前的配置无效?
- 直接在
dependencies中添加implementation 'org.projectlombok:lombok:1.18.22'不会覆盖插件传递的依赖,Gradle依赖解析会优先采用插件定义的版本优先级。 buildscript中的classpath配置是给构建脚本自身使用的,和项目编译/运行依赖的Lombok版本无关。
内容的提问来源于stack exchange,提问作者mjaggard
相关产品推荐
相关产品推荐

