这是我自己的答案,灵感来自@Martin Zeitler 的回答。
我们有一个通用的构建脚本,可以应用于所有项目build.gradle 设置常用选项、设置和任务。我们想添加这个逻辑,但是让它成为可选的并且不破坏现有的构建脚本。
该逻辑将由属性project.ext.buildJenkinsWithLatest(true 或false)激活和控制。
当逻辑处于活动状态时,将使用来自项目文件 dependencies-production.gradle 或 dependencies-jenkins.gradle 的依赖项。仅当属性为 true 并且通过存在 BUILD_NUMBER 环境变量检测到 CI 环境时,才会使用 Jenkins 依赖项。
通用构建脚本包含以下内容:
如果(project.ext.has('buildJenkinsWithLatest')){
println "使用条件依赖管理..."
//如果这是 Jenkins 构建,BUILD_NUMBER 不为空
if(project.ext.buildJenkinsWithLatest == true && System.getenv("BUILD_NUMBER") != null) {
println "--- 使用替代依赖..."
申请自:“dependencies-jenkins.gradle”
}
别的 {
println "--- 使用生产依赖..."
申请自:“dependencies-production.gradle”
}
}
别的 {
println "条件依赖管理未激活"
}
现在任何项目的build.gradle 已经应用此脚本将在运行时打印:
Conditional dependency management is not active
要使用该功能,我们需要为我们的项目执行以下操作:
- 为我们要动态选择版本的库创建一个包含
dependencies {} 子句的dependencies-jenkins.gradle。
- 为这些库创建一个
dependencies-production.gradle,其中包含 dependencies {} 子句,但指定了特定版本。
- 从项目
build.gradle 中保留的任何dependencies {} 中删除库。
- 将属性
project.ext.buildJenkinsWithLatest 设置为true 或false。
- 应用通用构建脚本(设置属性后!)。
例如在dependencies-jenkins.gradle 使用最新的 2.x.x 版本:
依赖{
编译'示例:我的库:2+'
}
关于如何以动态方式指定版本,请参阅@CantSleepNow 的回答。
并在dependencies-production.gradle 中使用特定版本:
依赖{
编译'示例:我的库:2.3.4'
}
然后在build.gradle 中设置属性并应用通用构建脚本:
...
project.ext.buildJenkinsWithLatest = true;
申请自:'../bxgradle/bx-std.gradle'
...
现在,当在 Jenkins 上运行构建时,将使用替代依赖项。如果希望在 Jenkins 上使用生产依赖项构建它,请将 project.ext.buildJenkinsWithLatest 设置为 false。