Удалить -SNAPSHOT из версии проекта в pom

У меня есть pom со следующим GAV

<groupId>com.company.services</groupId>
<artifactId>test-branch-2</artifactId>
<version>1.0.21-SNAPSHOT</version>

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

Я просмотрел документацию для версии: set, но все параметры предлагают мне интерактивную подсказку и попросят ввести имя для версии.

Я бы предпочел плагин версий, а не плагин release.

Ответ 1

Начиная с версии 2.10 Версии Maven Plugin вы можете просто:

mvn versions:set -DremoveSnapshot

Ответ 2

Если вы действительно не хотите использовать 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 сделает эти изменения эффективными.

Ответ 3

Добавьте в свой 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.

Ответ 4

Подобно подходу 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.