Есть ли способ настроить версию Maven POM из командной строки?

есть ли способ изменить номер версии без редактирования POM?

<groupId>org.example</groupId>
<artifactId>example</artifactId>
<version>1.0.0</version>

у нас есть система CI, где мы хотим выпустить ночные сборки, но без использования -SNAPSHOT решение Maven, так что если 1.0.0 является текущей версией, мы просто хотим иметь CI-NIGHTLY-BIULD-20120426.

я предположил, что это возможно с чем-то вроде mvn deploy -Dversion=CI-NIGHTLY-BIULD-20120426, но не очевидно. Плохим решением было бы позволить серверу CI редактировать pom.xml каждый раз, но я думаю, что это очень неудобный.

спасибо!

4 ответов


Я предлагаю использовать классификатор.

<groupId>foo</groupId>
<artifactId>bar</artifactId>
<version>1.0</version>

<properties>
    <!-- default classifier is empty -->
    <my.project.classifier></my.project.classifier>
</properties>

<build>
...
<plugins>
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>2.3.1</version>
    <configuration>
      <classifier>${my.project.classifier}</classifier>
    </configuration>
    <executions>...</executions>
  </plugin>
</plugins>
</build>

и

mvn package -Dmy.project.classifier=NIGHTLY-2012-04-26_02-30

Maven документация говорит о классификатор:

классификатор: иногда вы можете найти Пятый элемент координата, и это классификатор. Мы посетим классификатор позже, но пока достаточно знать, что такие проекты отображаются как groupId: artifactId: упаковка: классификатор: версия.

и

классификатор позволяет различать артефакты, которые были построены из те же пом, но отличаются по содержанию. Это некоторые необязательные и произвольная строка, которая - если присутствует - добавляется к имени артефакта сразу после номера версии. Как мотивация для этого элемента, рассмотрим, например, проект, который предлагает артефакт, нацеленный на JRE 1.5 но в то же время и артефакт, который до сих пор поддерживает JRE 1.4. Первый артефакт может быть оснащен классификатор jdk15 и второй с jdk14 такой, что клиенты могут выбрать, какой из них использовать.

другой общий случай использования для классификаторов-необходимость прикрепления вторичные артефакты к основному артефакту проекта. Если вы просматриваете Центральный репозиторий Maven, вы заметите, что источники классификаторов и javadoc используются для развертывания исходного кода проекта и документов API вместе с упакованными файлами классов.


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

вы можете сделать это в 2 шага:

  1. установить необходимую версию: mvn versions:set -DnewVersion=CI-NIGHTLY-BIULD-20120426
  2. развернуть: mvn deploy
  3. если вам нужно вернуть изменения, используйте mvn versions:revert (как указывают)

я настоятельно рекомендую прочитать Maven выпускает стероиды (часть 2, часть 3) Акселя Фонтейна. Это здорово, и я вполне счастлив, используя его.

Это не только детали, как вы con сделать то, что вы просите, но и содержит хороший совет, как вы можете связать свои версии сборки с сервером CI.

в двух словах, то вот основные моменты:

  1. выпуск Maven медленный, его нужно сделать быстрее!--19-->
  2. вы parametarize вашего проекта вариант, как

    <version>${VERSION_NUMBER}</version>
    ...
    <properties>
    ...
        <VERSION_NUMBER>1.0-SNAPSHOT</VERSION_NUMBER>
    ...
    </properties>
    
  3. локальные сборки получают эту версию:1.0-SNAPSHOT
  4. версия сборки только С вашего сервера CI
  5. в конфигурации проекта Jenkins / Hudson вы используете

    clean deploy scm:tag -DVERSION_NUMBER=${BUILD_NUMBER}
    

таким образом, вы получаете новый релиз с каждой сборкой Дженкинса, а не только каждую ночь.


Вы можете изменить конфигурация для использования

clean deploy scm:tag -DVERSION_NUMBER=1.0.0-CI-NIGHTLY-BIULD-${BUILD_ID}

и вы получите варианты, как 1.0.0-CI-NIGHTLY-BIULD-2012-04-26_12-20-24


вы можете параметризовать номер версии как

<groupId>foo</groupId>
<artifactId>bar</artifactId>
<version>${my.project.version}</version>

<properties>
    <my.project.version>1.0</my.project.version>
</properties>

и диск номер версии из командной строки с помощью

mvn package -Dmy.project.version=NIGHTLY

хотя это возможно, Maven 3 препятствует этому.