Примечание:
Этот ответ относится к Maven 2 только! Указанные LATEST
и RELEASE
метаверсии have been dropped in Maven 3 "for the sake of reproducible builds", более 6 лет назад. См. Это Maven 3 compliant solution.
Если вы всегда хотите использовать новейшую версию, у Maven есть два ключевых слова, которые вы можете использовать в качестве альтернативы диапазонам версий. Вы должны использовать эти параметры с осторожностью, поскольку вы больше не контролируете подключаемые модули/зависимости, которые вы используете.
Когда вы зависите от плагина или зависимости, вы можете использовать значение версии LATEST или RELEASE. LATEST относится к последней выпущенной или мгновенной версии определенного артефакта, самого недавно развернутого артефакта в конкретном репозитории. RELEASE относится к последнему выпуску, отличному от моментального снимка в репозитории. В целом, не рекомендуется разрабатывать программное обеспечение, которое зависит от неспецифической версии артефакта. Если вы разрабатываете программное обеспечение, вы можете использовать RELEASE или LATEST в качестве удобства, чтобы вам не приходилось обновлять номера версий при выпуске новой версии сторонней библиотеки. Когда вы выпускаете программное обеспечение, вы всегда должны следить за тем, чтобы ваш проект зависел от конкретных версий, чтобы уменьшить вероятность того, что ваша сборка или ваш проект пострадали от выпуска программного обеспечения, не находящегося под вашим контролем. Используйте ПОСЛЕДНИЕ и РЕЛИЗЫ с осторожностью, если вообще.
Для получения более подробной информации см. POM Syntax section of the Maven book. Или увидит этот документ на Dependency Version Ranges, где:
- квадратная скобка (
[
& ]
) означает "закрытый" (включительно).
- Скобка (
(
& )
) означает «открытая» (эксклюзивная).
Вот пример, иллюстрирующий различные варианты. В репозитории 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>
Если зависимость от этого артефакта требуется, у вас есть следующие опции (другие version ranges могут быть определены, конечно, просто показывая значимые из них здесь):
Объявляет точную версию (всегда будет решать 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>
Объявляет версию в качестве разделительного (рассосется 1.1.1) (удалены из Maven 3.x):
<version>RELEASE</version>
Обратите внимание, что по умолчанию ваши собственные развертывания будет обновлять «последнюю» запись в метаданных Maven, но чтобы обновить запись «release», вам необходимо активировать «release-профиль» из Maven super POM. Вы можете сделать это либо с «-Prelease профиля» или «-DperformRelease = истина»
Стоит подчеркнуть, что любой подход, который позволяет Maven выбрать версии зависимостей (последний, выпуск и диапазоны версий) могут оставляйте вас открытым для создания проблем времени, поскольку более поздние версии могут иметь другое поведение (например, плагин зависимостей ранее переключил значение по умолчанию от true на false, с запутанными результатами).
Поэтому, как правило, рекомендуется определять точные версии в выпусках. Как указывает Tim's answer, maven-versions-plugin - удобный инструмент для обновления версий зависимостей, в частности целей versions:use-latest-versions и versions:use-latest-releases.
Я действительно не рекомендую эту практику (и не использую диапазоны версий) ради повышения воспроизводимости. Сборка, которая начинает неожиданно завершаться по неизвестной причине, более раздражает, чем вручную обновляет номер версии. – 2009-09-17 22:52:32
@Martin Мне известно о соглашении xyz-SNAPSHOT, но я думал о библиотеках, которые выпущены в окончательных версиях в репозиторий (т. Е. Идет из dream-library-1.2.3.jar в dream-library-1.2.4. банку и т. д.). – 2008-08-27 16:50:04
@PascalThivent Ручное обновление номера версии в pom - это боль, если вы делаете непрерывные релизы.Я использую плагин версий в сочетании с плагином scm, чтобы пройти мимо этого (см. Мой ответ). – 2012-01-09 21:24:50