从pom中的项目版本中删除-SNAPSHOT

时间:2014-05-06 17:25:36

标签: maven maven-3 pom.xml maven-release-plugin versions-maven-plugin

我有一个带有以下GAV的pom

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

我想在批处理模式下使用maven删除-SNAPSHOT,所以我可以使用Jenkins来完成,而不必手动指定任何内容。

我查看了版本的文档:set但是所有选项都为我提供了一个交互式提示,并要求我输入该版本的名称。

我更喜欢版本插件,而不是发布插件。

4 个答案:

答案 0 :(得分:32)

从版本Maven插件版本2.10开始,您只需执行以下操作:

blob.Metadata["fileLoadId"] = "5";

答案 1 :(得分:10)

如果你真的不想使用Maven Release Plugin(无论出于何种原因),这就是我如何成功地以标准方式从maven POM中删除SNAPSHOT后缀(作为分类器)(是,没有脚本,没有自定义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-pluginparse-version目标将解析当前版本的POM并将其设置为一组默认parsedVersion作为前缀的majorVersion属性,minorVersionincrementalVersion作为后缀(查看文档,您还将拥有classifierbuildNumber)。因此,在执行之后,我们可以在POM中使用${parsedVersion.majorVersion}之类的属性,等等。
  • versions-maven-pluginset目标将使用这些属性构建您真正想要的新版本(在这种情况下,删除SNAPSHOT,因为我们排除了${parsedVersion.classifier}属性)。
  • 最后,versions-maven-plugincommit目标会使这些更改生效。

答案 2 :(得分: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来删除versions:set生成的备份POM。或者,您可以将<generateBackupPoms>false</generateBackupPoms>添加到versions插件的配置中。

答案 3 :(得分:3)

类似于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

相关问题