You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 19:50:47