有没有自动增加maven版本的好方法

Dav*_*vid 4 git continuous-integration maven

我已经研究这个问题有一段时间了,这是当前的情况:

  • 我有一个开发分支,每次推送后,我想将当前的 Maven 库作为快照发布。我目前通过使用 exec-plugin 和 echo 检索我的 maven 版本来执行此操作(例如:-Dexec.executable=echo -Dexec.args='${project.version}' org.codehaus.mojo:exec-maven-plugin: 1.6.0:执行))
  • 然后,我使用 update-versions 命令将“-SNAPSHOT”注入其中并发布(我不会将其发布回分支,因为我真的不想保留“-SNAPSHOT”)。

对于发布,我想我可以做类似的事情,检索版本,然后找到一种方法来增加它 - >发布回当前活动的分支 - >然后最后进行部署。现在,我采用了一种稍微简单但容易出错的方法:我尝试获取我们使用的工件中设置的当前版本,如果它存在,我会使管道失败,并显示一条消息,表明该版本已经存在。现在不太好,因为我实际上在这里反转了错误条件,所以如果 Maven 由于任何其他原因失败,它实际上会假设该版本不存在并继续执行下一步。啊。

现在,我在这里寻找的要点实际上是围绕处理 Maven 项目和版本控制的最佳方法。理想情况下,我的目标是:

  • 能够正确发布某些内容作为快照(也许不必求助于 maven-exec)?
  • 能够增量更新我的版本,这样用户就不必不断更新他们的版本?当然,这个过程必须确保我不会将可能有错误版本的东西推送到 master(这将导致部署失败)。编辑:换句话来说,这里的目的不仅仅是将版本增加到“下一个”,而是增加到“下一个可用版本”,确保我不会尝试合并以前发布的版本。

我确实有一个限制:我们使用的工具不允许我们拥有合并挂钩(Azure DevOps 与 Azure Git)。这意味着我们仅限于拉取(和 PR)以及 PR 合并后的管道。

我很高兴在这里实际采取任何其他方法,我觉得我正在竭尽全力做出一些现在应该有清晰路径的东西,所以我希望有人在这里提供一些指导。

khm*_*ise 6

@davidxxx 答案的补充。使用 build-helper maven 插件可以改善这一点:

mvn build-helper:parse-version versions:set \
    -DnewVersion=\${parsedVersion.nextMajorVersion}.0.0 \
    versions:commit
Run Code Online (Sandbox Code Playgroud)

或者像这样:

mvn build-helper:parse-version versions:set \
   - DnewVersion=\${parsedVersion.majorVersion}.\${parsedVersion.nextMinorVersion}.0 \
   versions:commit
Run Code Online (Sandbox Code Playgroud)

没有任何 sed 等更多详细信息: