gradle - 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 作业,使用所有现有版本运行构建。
但是这个解决方案感觉很定制。我希望有更标准的东西并使用锁定文件。
解决方案
推荐阅读
- java - JFreeChart X 轴标签超出图表区域
- python - First Web Scrape - 如何在 DIV 中访问子 DIV?
- python - python中的蒙特卡罗模拟-循环问题
- r - 带有 .funs 的安排的令人费解的行为
- ruby-on-rails - 更好的查询方式,而不是遍历所有数据
- c# - 如何修复 C# Web 服务 SSIS - 模拟中的“对象引用未设置为对象的实例”错误
- php - 更改表格中某些行的颜色 - wordpress
- sql - 检查记录是否存在然后在数据库表中插入新行?
- scala - Scala Playframework'方法invokeBlock不会覆盖任何东西'
- docker - docker/docker-compose build --pull 行为