25

我有一个带有以下 GAV 的 pom

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

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

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

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

4

4 回答 4

54

从版本 Maven 插件的 2.10 版开始,您可以简单地执行以下操作:

mvn versions:set -DremoveSnapshot
于 2017-09-04T11:34:13.020 回答
12

如果您真的不想使用 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>

并简单地执行:从tomvn validate -Pdrop-snapshot
传递的示例 pom 的版本。0.0.1-SNAPSHOT0.0.1

它实际上是如何工作的:

  • ,目标build-helper-maven-pluginparse-version将解析 POM 的当前版本并将其设置在一组属性中,默认情况下parsedVersion作为前缀和majorVersion,作为后缀(查看文档minorVersionincrementalVersion您也将拥有classifierand buildNumber)。因此,在它执行之后,我们可以在我们的 POM 中使用诸如此类的属性${parsedVersion.majorVersion}
  • 然后versions-maven-pluginset目标将使用这些属性来构建您真正想要的新版本(在这种情况下删除 SNAPSHOT,因为我们排除了该${parsedVersion.classifier}属性)。
  • 最后,versions-maven-plugin目标commit将使这些更改生效。
于 2015-12-11T15:13:01.327 回答
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

告诉 Maven 仅在您的-NPOM 中定义了模块的情况下处理根项目。这不是绝对必要的,但可以防止build-helper插件不必要地针对子模块运行。该versions插件在任何情况下都只在根项目上运行,并自动遍历所有模块。考虑使用插件的reactorModuleConvergence规则maven-enforcer来确保正确处理多模块项目。

您可以运行mvn versions:commit以删除由versions:set. 或者,您可以添加<generateBackupPoms>false</generateBackupPoms>versions插件的配置中。

于 2016-07-06T14:17:31.447 回答
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-SNAPSHOT1.0.0.0.pom.xml

于 2016-09-21T15:58:46.347 回答