【问题标题】:Maven: change version properties in pom.xmlMaven:更改 pom.xml 中的版本属性
【发布时间】:2023-03-06 15:23:01
【问题描述】:

我有一个 Maven pom.xml,我使用 Jenkins 构建项目并发布项目部署。

但是在构建“发布版本”之前和之后,我们需要在

中设置我的版本

例如: 我在 pom.xml 中有

<properties>
   <version-own>0.0.21-SNAPSHOT</version-own>
</properties>

在发布之前我需要这样设置

<properties>
   <version-own>0.0.25</version-own>
</properties>

发布后我需要这样设置

<properties>
   <version-own>0.0.27-SNAPSHOT</version-own>
</properties>

如何做到这一点?

【问题讨论】:

  • 对于初学者来说,0.0.21-SNAPSHOT 在它的发行版中应该变成 0.0.21。然后,在发布之后,将数字滚动到下一个版本,并添加快照,即 0.0.22-SNAPSHOT,以表明它当前正在开发中。请注意,您似乎在跳过数字,这很好,但在此示例中我没有。

标签: maven jenkins pom.xml


【解决方案1】:

有一种方法可以轻松实现。使用一个命令,您可以更改任何您想要的部分:

对于剪切和粘贴:

mvn build-helper:parse-version versions:set -DbuildNumber=555 '-DnewVersion=${parsedVersion.majorVersion}.${parsedVersion.minorVersion}.${parsedVersion.incrementalVersion}-${buildNumber}'

为了清楚起见:

mvn build-helper:parse-version versions:set -DbuildNumber=555
   '-DnewVersion=
                  ${parsedVersion.majorVersion}
                 .${parsedVersion.minorVersion}
                 .${parsedVersion.incrementalVersion}
                 -${buildNumber}'

这是一个简洁的示例,如何使用构建值一次性更新版本

【讨论】:

    【解决方案2】:

    有类似parsedVersion.nextIncrementalVersion

    mvn build-helper:parse-version versions:set -DnewVersion=\${parsedVersion.majorVersion}.\${parsedVersion.minorVersion}.\${parsedVersion.nextIncrementalVersion} versions:commit

    【讨论】:

      【解决方案3】:

      Build-helper 插件支持正则表达式替换,如果需要,甚至可以解析版本号。 http://www.mojohaus.org/build-helper-maven-plugin/

      【讨论】:

        【解决方案4】:

        看着这个comment,你正在描述你正在使用这个版本来提供依赖。 maven-release-plugin 应该可以帮助您管理版本。所以在你的 pom.xml 中提供那个插件。

        对于手动提供发布和开发版本的步骤,请在 jenkins 中创建一个具有 2 个字符串参数的作业:
        开发版本
        发布版本
        添加“调用*Maven目标”构建步骤以执行发布(例如):

        clean release:clean release:prepare release:perform -DdevelopmentVersion=${developmentVersion} -DreleaseVersion=${releaseVersion}
        

        在构建作业时,它会提示您同时插入 developmentVersion 和 releaseVersion。

        干杯,
        暴君

        【讨论】:

          【解决方案5】:

          如果您不必使用自己的版本属性,请考虑以下将在您的 &lt;project&gt;&lt;version&gt;0.0.21-SNAPSHOT&lt;/version&gt;&lt;/project&gt; 元素上运行的内容:

          mvn versions:set versions:commit -DnewVersion="0.0.25"
          

          这将修改您的 pom 并根据您的喜好调整版本。您可能希望将此更改提交到您的源代码控制存储库,为此 scm 插件的 scm:checkin 目标可以正常工作(假设您希望这是自动化的):

          mvn scm:checkin -Dincludes=pom.xml -Dmessage="Setting version, preping for release."
          

          然后你可以执行你的发布(我推荐maven-release-plugin),之后你可以设置你的新版本并像上面一样提交它。

          versions plugin 是您的朋友。编写上述脚本可能会涉及一些参数化构建,或者最好是 jenkins 的 groovy 插件,它允许您获取特定于 maven 的构建变量。

          【讨论】:

          • 需要更改 0.0.21-SNAPSHOTcom.test-releasefeatures-test-release ${version-own}
          • 在这里扮演魔鬼的拥护者:你为什么不能简单地放弃&lt;version-own&gt;0.0.21-SNAPSHOT&lt;/version-own&gt;&lt;version&gt;0.0.21-SNAPSHOT&lt;/version&gt;?您仍然可以使用${project.version} if 引用该版本,并且您可以将我上面描述的模式与版本、发布和 scm 插件一起使用。
          • version-own 是依赖版本
          • 您从未在原始帖子中提到此版本是依赖项。请参阅versions-maven-plugin。它可以根据最新版本更新依赖项,以及其他功能。
          • scm:checkin 是在 ci 系统中运行时的有趣之处。我以为versions:commit 会这样做
          【解决方案6】:

          对于初学者,您可以手动完成。如果您的构建很好地遵循 maven 约定,您可能可以利用现有的几个 maven 插件之一来帮助管理版本号。

          maven-versions-plugin 有助于自动手动更改版本号。它有很好的 CLI 命令来帮助在发布之前调整你的 pom。

          然后是maven-release-plugin,它可以自动执行剪切发布的整个过程。它会将您的快照更改为发布版本,然后在发布构建后将其滚动到下一个快照。在所有这些过程中,它会将离散版本的 pom 提交到源代码控制。

          同样,在 maven 社区的自动化程度更高的部分中取得成功的秘诀在于您的构建是否以 maven 方式做事。被黑、经过高度调整、非常规的构建通常对成功使用发布插件有很多障碍。

          【讨论】:

          • 你不明白我的意思。需要更改。
            0.0.21-SNAPSHOTcom.test-releasefeatures-test -release${version-own}
          最近更新 更多