Диапазон значений в gradle
Каковы возможные способы указания диапазонов версий в зависимостях gradle? Я видел примечание 1. +, но я не нашел документа, который действительно говорит, что возможно, а что нет. Кроме того, я не знаю, могут ли использоваться диапазоны Maven.
Может кто-нибудь дать мне краткий обзор, чтобы я мог понять правила?
Ответы
Ответ 1
В книге "Gradle Управление зависимостями" указано p. 12 и 13, что помимо + -нотации (2.1. + Означает диапазон от 2.1.0 включительно до версии 2.2.0), вы можете использовать нотацию Ivy для открытых и закрытых интервалов формы
[1.0,2.0]
[1.0,2.0[
а также
[1.0, )
для всех версий начиная с 1.0.
Ответ 2
Предпочтительная альтернатива: укажите диапазон версий, используя нотацию плюща. Вот несколько примеров, скопированных с этой веб-страницы:
[1.0, 2.0]
: все версии> = 1.0 и & lt; = 2.0
[1.0, 2.0[
: все версии> = 1.0 и & lt; 2.0
[1.0, )
: все версии> = 1.0 // avoid. Unbound is dangerous!
Непростая альтернатива: используйте "+" в мажорном, минорном номере или номере патча. У этого подхода есть как минимум две проблемы:
- Если вы создаете библиотеку и генерируете файл pom, pom будет несовместим с maven, если вы не примените какой-либо обходной путь для определения версии и предотвращения зависимости pom от использования "+" в элементе версии. Смотрите этот выпуск Grad GitHub.
- Значение "+" подвержено путанице. Ну, может и нет, но спросите всех, знают ли все ваши ровесники разницу между
1.1.+
и 1.1+
в зависимости от gradle.
Идеальная альтернатива: вообще избегать динамических зависимостей (используя '+' или диапазоны версий). Вместо этого используйте фиксированную зависимость от версии и часто обновляйте версию с помощью хорошего тестирования. Вот почему:
- В старые времена обратная совместимость была священной. Это больше не правда. Новые версии часто перемещают/удаляют/переименовывают классы и функции.
- Если ваша зависимость является динамической (особенно с "+" или несвязанным диапазоном), при следующей сборке может быть выбрана новая версия, несовместимая с вашим проектом. Несовместимость может быть обнаружена только в rutime.
- Версия X вашей библиотеки, созданная сегодня, может отличаться от версии X вашей библиотеки, созданной завтра, если одна из ее зависимостей является динамической, а новая продакшен версияется в одночасье. Такой уровень неопределенности нежелателен для библиотек.