ПРИМЕЧАНИЕ:
Этот ответ относится только к Maven 2! Упомянутые метаверсии LATEST
и RELEASE
были сброшены в Maven 3 «ради воспроизводимых сборок» более 6 лет назад.
Пожалуйста, обратитесь к этому Maven 3-совместимому решению .
Если вы всегда хотите использовать новейшую версию, у Maven есть два ключевых слова, которые вы можете использовать в качестве альтернативы диапазонам версий. Эти параметры следует использовать с осторожностью, поскольку вы больше не контролируете используемые плагины / зависимости.
Когда вы зависите от плагина или зависимости, вы можете использовать значение версии LATEST или RELEASE. ПОСЛЕДНИЙ относится к последней выпущенной версии или версии моментального снимка конкретного артефакта, самого последнего развернутого артефакта в определенном хранилище. RELEASE относится к последнему выпуску без моментальных снимков в хранилище. В целом, не рекомендуется разрабатывать программное обеспечение, которое зависит от неспецифической версии артефакта. Если вы разрабатываете программное обеспечение, вы можете использовать RELEASE или LATEST для удобства, чтобы вам не приходилось обновлять номера версий при выпуске нового выпуска сторонней библиотеки. Когда вы выпускаете программное обеспечение, вы всегда должны следить за тем, чтобы ваш проект зависел от конкретных версий, чтобы уменьшить шансы вашей сборки или проекта повлиять на выпуск программного обеспечения, который не находится под вашим контролем. Используйте LATEST и RELEASE с осторожностью, если вообще применяете.
Подробнее см. Раздел «Синтаксис POM » книги Maven . Или посмотрите этот документ в Диапазон версий зависимости , где:
- Квадратная скобка (
[
& ]
) означает «закрыто» (включительно).
- Скобка (
(
& )
) означает «открытый» (исключающий).
Вот пример, иллюстрирующий различные варианты. В репозитории Maven com.foo:my-foo имеет следующие метаданные:
<?xml version="1.0" encoding="UTF-8"?><metadata>
<groupId>com.foo</groupId>
<artifactId>my-foo</artifactId>
<version>2.0.0</version>
<versioning>
<release>1.1.1</release>
<versions>
<version>1.0</version>
<version>1.0.1</version>
<version>1.1</version>
<version>1.1.1</version>
<version>2.0.0</version>
</versions>
<lastUpdated>20090722140000</lastUpdated>
</versioning>
</metadata>
Если требуется зависимость от этого артефакта, у вас есть следующие опции (другие диапазоны версий , конечно, можно указать, просто показывая соответствующие здесь):
Объявить точную версию (всегда разрешается до 1.0.1):
<version>[1.0.1]</version>
Объявите явную версию (всегда разрешается до 1.0.1, если не происходит коллизия, когда Maven выберет подходящую версию):
<version>1.0.1</version>
Объявить диапазон версий для всех 1.x (в настоящее время разрешается до 1.1.1):
<version>[1.0.0,2.0.0)</version>
Объявить диапазон открытых версий (будет преобразован в 2.0.0):
<version>[1.0.0,)</version>
Объявить версию как ПОСЛЕДНЮЮ (разрешается до 2.0.0) (удалено из maven 3.x)
<version>LATEST</version>
Объявить версию как RELEASE (разрешается до 1.1.1) (удалено из maven 3.x):
<version>RELEASE</version>
Обратите внимание, что по умолчанию ваши собственные развертывания будут обновлять «последнюю» запись в метаданных Maven, но для обновления записи «release» вам необходимо активировать «release-profile» из Maven super POM . Вы можете сделать это с помощью «-Prelease-profile» или «-DperformRelease = true»
Стоит подчеркнуть, что любой подход, который позволяет Maven выбирать версии зависимостей (LATEST, RELEASE и диапазоны версий), может оставить вас открытым для создания проблем со временем, так как более поздние версии могут иметь различное поведение (например, плагин зависимости ранее переключил значение по умолчанию с true на false, что привело к сбивающим с толку результатам).
Поэтому, как правило, рекомендуется определять точные версии в выпусках. Как указывает Тим , maven-version-plugin - это удобный инструмент для обновления версий зависимостей, особенно версий : use-latest-version и версии: используйте последние выпуски голов.