Ответ 1
Начиная с версии 2.10 Версии Maven Plugin вы можете просто:
mvn versions:set -DremoveSnapshot
У меня есть pom со следующим GAV
<groupId>com.company.services</groupId>
<artifactId>test-branch-2</artifactId>
<version>1.0.21-SNAPSHOT</version>
Я хочу удалить -SNAPSHOT
из этого, используя maven в пакетном режиме, поэтому я могу сделать это с Jenkins и не указывать ничего вручную.
Я просмотрел документацию для версии: set, но все параметры предлагают мне интерактивную подсказку и попросят ввести имя для версии.
Я бы предпочел плагин версий, а не плагин release.
Начиная с версии 2.10 Версии Maven Plugin вы можете просто:
mvn versions:set -DremoveSnapshot
Если вы действительно не хотите использовать Maven Release Plugin (по какой бы то ни было причине), вот как мне удастся отбросить суффикс SNAPSHOT (hanbdled как классификатор) стандартным способом из maven maven (т.е. нет скриптов, нет настраиваемого плагина maven).
Учитывая следующий профиль:
<profile>
<id>drop-snapshot</id>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>1.11</version>
<executions>
<execution>
<id>parse-version</id>
<phase>validate</phase>
<goals>
<goal>parse-version</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>versions-maven-plugin</artifactId>
<version>2.2</version>
<executions>
<execution>
<id>set-version</id>
<phase>validate</phase>
<goals>
<goal>set</goal>
</goals>
<configuration>
<newVersion>${parsedVersion.majorVersion}.${parsedVersion.minorVersion}.${parsedVersion.incrementalVersion}</newVersion>
</configuration>
</execution>
<execution>
<id>upgrade-pom</id>
<phase>validate</phase>
<goals>
<goal>commit</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
И просто выполнив: mvn validate -Pdrop-snapshot
Версия примера pom прошла от 0.0.1-SNAPSHOT
до 0.0.1
.
Как это работает:
build-helper-maven-plugin
, parse-version
будет анализировать текущую версию POM и устанавливать ее в наборе свойств, имеющих по умолчанию parsedVersion
в качестве префикса и majorVersion
, minorVersion
, incrementalVersion
в качестве суффиксов (проверьте документацию, у вас также будут classifier
и buildNumber
). Следовательно, после его выполнения мы можем затем использовать в наших POM свойства типа ${parsedVersion.majorVersion}
и т.д.versions-maven-plugin
, set
затем будет использовать эти свойства для создания новой версии, которую вы действительно хотите (в этом случае выпадающего SNAPSHOT, потому что мы исключили свойство ${parsedVersion.classifier}
).versions-maven-plugin
, commit
сделает эти изменения эффективными.Добавьте в свой POM следующее:
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>1.11</version>
<configuration>
<name>newVersion</name>
<value>${project.version}</value>
<regex>-SNAPSHOT</regex>
<failIfNoMatch>false</failIfNoMatch>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>versions-maven-plugin</artifactId>
<version>2.2</version>
</plugin>
</plugins>
</build>
Теперь вы можете удалить часть -SNAPSHOT
своей версии проекта:
mvn build-helper:regex-property versions:set -N
-N
указывает Maven только обрабатывать корневой проект, если у вас есть модули, определенные в вашем POM. Это не является строго необходимым, но не позволяет плагину build-helper
запускать без необходимости против подмодулей. Плагин versions
запускается только в корневом проекте в любом случае и автоматически перемещает все модули. Подумайте об использовании правила reactorModuleConvergence
плагина maven-enforcer
, чтобы убедиться, что многомодульные проекты обрабатываются правильно.
Вы можете запустить mvn versions:commit
, чтобы удалить резервные POM (ы), созданные с помощью versions:set
. В качестве альтернативы вы можете добавить <generateBackupPoms>false</generateBackupPoms>
в конфигурацию плагина versions
.
Подобно подходу A_Di-Matteo с build-helper
, но без дополнительной настройки плагинов:
mvn build-helper:parse-version versions:set \
-DnewVersion=\${parsedVersion.majorVersion} \
.\${parsedVersion.minorVersion} \
.\${parsedVersion.incrementalVersion \
.\${parsedVersion.buildNumber} \
versions:commit
Это заменит ваш 1.0.0.0-SNAPSHOT
на 1.0.0.0
в pom.xml
.