Выбор последней версии (не снимок версии) с Nexus в Maven с плагином

Я использую Maven 3.5. У меня есть многомодульная структура проекта: модуль A является родительским и имеет два дочерних модуля B и модуль C.

Мое требование: я хотел бы иметь последний выпуск Nexus для некоторых сторонних фляг. Это в основном банки из испытательного блока. Обратите внимание, что я не хочу иметь версии Snapshot.

Я читал, что указание RELEASE в pom.xml не работает с версиями maven 3.x. Но я попробовал, и он работает нормально. (используя IntelliJ только для информации)1) Так почему же это работает для меня?

2) Должен ли я использовать RELEASE с Maven 3.5?

Я также читал, что можно использовать Maven "version-maven-plugin" с целью "использовать последние версии" с Maven 3.x. Я не уверен, как использовать это точно. Я пробовал следующее:

в моем родительском pom.xml из модуля A:

<plugin>
   <groupId>org.codehaus.mojo</groupId>
   <artifactId>versions-maven-plugin</artifactId>
   <version>2.5</version>
   <executions>
      <execution>
         <goals>
            <goal>use-latest-releases</goal>
         </goals>
      </execution>
   </executions>
</plugin>

Теперь 3) как и что я должен указать в теге версии моей зависимости в субмодуле, скажем, C? Я написал так:

<properties>
    <!-- V dependencies -->
    <version.vvv.iii.piiii></version.vvv.iii.piiii>
</properties>

<dependency>
        <groupId>c.b.ttt</groupId>
        <artifactId>V-RApi</artifactId>
        <version>version.vvv.iii.piiii</version>      
 </dependency>

В основном я хочу знать, как можно использовать этот конкретный плагин maven и цель практически. Я прочитал Maven документацию для него, но не смог применить его.

1 ответ

1) Он все еще работает, поскольку функция версии RELEASE еще не отключена (хотя это "плохая практика", поскольку она нарушает принцип воспроизводимых сборок). Люди, отвечающие на этот другой вопрос, также сообщают, что RELEASE все еще работает:

Как мне сказать Maven использовать последнюю версию зависимости?

2) Это действительно зависит от вас, если вы используете РЕЛИЗ или нет. Просто имейте в виду, что отсутствие воспроизводимых сборок считается плохой практикой. Представьте, что команда тестирования меняет свой API и выпускает банку. Вы перестраиваете свой собственный проект, который принимает новую версию jar команды тестирования, и ваша сборка не выполняется (даже если вы ничего не изменили). Вы должны сравнить это с удобством использования RELEASE. Плюс, постоянный пинг вашего артефактного сервера для последних версий (если их много) замедлит вашу сборку.

3) Если вы собираетесь использовать точные номера версий (вместо RELEASE), которые лично я считаю лучшим подходом, то они должны быть определены в модуле A (не в модуле C) или даже в родительском pom модуля A (то есть как мы это делаем на моем рабочем месте). Определение точных номеров версий все в одном месте, и, насколько это практически возможно, в иерархии модулей - это, как правило, хорошая вещь - она ​​аккуратна и непротиворечива и менее подвержена ошибкам и несоответствиям.

Редактировать:

Как и требовалось, вот как использовать плагин maven: mvn versions:use-latest-releasesвозможно также сопровождается mvn versions:commit

Ознакомьтесь с документацией, в частности со страницей "Использование":

http://www.mojohaus.org/versions-maven-plugin/

Другие вопросы по тегам