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

如何在Gradle任务中获取依赖库版本并拦截SNAPSHOT版本构建

在Gradle任务中检查指定依赖的版本并拦截快照版本

刚好做过类似的需求,给你两个可靠的解决方案,直接就能实现你要的功能——获取指定依赖版本并拦截快照版本的构建:

方案1:通过依赖配置遍历查找(支持传递依赖)

这种方式可以找到直接声明或间接引入的目标依赖,通用性更强。下面是完整的可运行任务代码:

task checkLibVersion {
    doLast {
        // 指定要检查的依赖坐标(group:name)
        def targetDependency = "io.mylib:core"
        // 遍历runtimeClasspath配置(可根据实际需求替换为compileClasspath等)
        def matchedDep = configurations.runtimeClasspath.resolvedConfiguration.resolvedArtifacts.find {
            it.moduleVersion.id.group + ":" + it.moduleVersion.id.name == targetDependency
        }

        if (!matchedDep) {
            throw new GradleException("未找到目标依赖: $targetDependency")
        }

        def version = matchedDep.moduleVersion.id.version
        if (version.endsWith("-SNAPSHOT")) {
            throw new GradleException("Mylib使用了快照版本: $version,构建终止")
        } else {
            println "Mylib版本检查通过: $version"
        }
    }
}

关键细节说明:

  • 使用doLast闭包:确保任务执行阶段才去解析依赖,避免在配置阶段就触发依赖解析(会拖慢构建速度)
  • 选择合适的配置:runtimeClasspath包含所有运行时依赖,若只需检查编译期依赖,可替换为compileClasspath
  • 精准匹配逻辑:通过group:name组合匹配,避免同名不同组的依赖冲突

方案2:直接查找声明的依赖(Gradle 7.0+)

如果你只需要检查直接声明的依赖,且使用Gradle 7.0及以上版本,可以用更简洁的写法:

task checkLibVersion {
    doLast {
        // 直接匹配group和name
        def matchedDep = project.dependencies.find { 
            it.group == "io.mylib" && it.name == "core" 
        }
        
        if (!matchedDep) {
            throw new GradleException("未找到直接声明的目标依赖")
        }

        def version = matchedDep.version
        if (version.endsWith("-SNAPSHOT")) {
            throw new GradleException("Mylib快照版本禁止发布: $version")
        }
    }
}

注意事项:

  • 此方法仅能找到dependencies块中直接声明的依赖,无法识别传递依赖
  • 如果依赖是通过平台/BOM引入的,需要调整查找逻辑

集成到发布流水线

最后可以把检查任务和发布任务关联,确保发布前自动执行版本检查:

// 让publish任务依赖checkLibVersion,先检查再发布
tasks.named('publish') {
    dependsOn checkLibVersion
}

这样每次执行发布操作时,都会先自动检查依赖版本,一旦发现快照版本就直接终止构建,完全符合你的流水线需求。

内容的提问来源于stack exchange,提问作者Andy Res

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:30:31