首页 > 解决方案 > Gradle 中依赖项的版本范围并锁定 CI 构建的特定版本

问题描述

我正在使用 gradle 为 AsciidoctorJ 编写扩展。我的扩展适用于所有2.x.x版本的 AsciidoctorJ,所以我的想法是将依赖项声明为 range [2.0.0, 3.0.0[

dependencies {
    implementation "org.asciidoctor:asciidoctorj:[2.0.0, 3.0.0["
    // other dependencies
}

现在在 CI 系统上,我想使用多个版本的 AsciidoctorJ 进行测试,以确保它适用于该范围内的所有版本。


如果我使用锁定文件(请参阅锁定依赖版本,我不明白如何将版本设置为特定版本。--update-locks不要指望版本:

./gradlew check --update-locks org.asciidoctor:asciidoctorj:2.2.0

失败并出现此错误:

更新锁格式必须为<group>:<artifact>'org.asciidoctor:asciidoctorj:2.2.0'无效。

这是预期的(如记录)。


我目前的解决方法是添加一个影响正在使用的严格版本的项目属性:

def strictAsciidoctorjVersion = hasProperty('asciidoctorjVersion') ? '!!' + getProperty('asciidoctorjVersion') : ''

dependencies {
    implementation "org.asciidoctor:asciidoctorj:[2.0.0, 3.0.0[${strictAsciidoctorjVersion}"
    // other dependencies
}

这按预期工作。我可以跑:

./gradlew build -PasciidoctorjVersion=2.2.0

或者

./gradlew build -PasciidoctorjVersion=2.5.1

我编写了一个 CI 作业,使用所有现有版本运行构建。

但是这个解决方案感觉很定制。我希望有更标准的东西并使用锁定文件。

标签: gradlerangedependency-resolution

解决方案


推荐阅读