#gradle #range #dependency-resolution
Вопрос:
Я пишу расширение для AsciidoctorJ, используя gradle. Мое расширение работает со всеми 2.x.x
версиями AsciidoctorJ, поэтому моя идея состояла в том, чтобы объявить зависимость в виде диапазона [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, запускающее сборку со всеми существующими версиями.
Но это решение кажется очень нестандартным. Я надеялся, что у меня будет что-то более стандартное и работа с файлами блокировки.