Java:如何获得用于程序的mercurial当前变更集编号

Rab*_*ski 8 java mercurial changeset

我最近开始在Java项目中使用mercurial进行版本控制.当我运行程序时,它用于产生特定输出的输入参数被写入特定文件.如果我可以将当​​前的mercurial变更集编号(表示我的程序的版本)添加到该输出文件中,那将是很好的.

在Windows上最简单的方法是什么?我可以编写一个简单的Java解析器来获取hg log -l 1 命令第一行的输出,但也许有一种更简单的方法(即更少的代码行)?

Von*_*onC 10

你可以宁愿使用hg identify.

hg id应该在打包步骤中,当提交源并生成应用程序的打包(jar)版本时.
在该步骤中,您可以生成包含此类信息的version.txt文件.

$ MY_VERSION=$(hg id)
$ echo $MY_VERSION
53efa13dec6f+ tip
Run Code Online (Sandbox Code Playgroud)

(参见Python的"构建标识")

  • 尾随加号意味着VonC具有本地的,未提交的更改,这也很值得注意. (2认同)

小智 7

由于您在Java项目中,这可能与您相关.我使用此Ant目标在Tomcat Manager页面的应用程序列表中显示版本信息(Mercurial changeset id).我只是将changeset id放在web.xml中的display-name xml元素中.

<target name="build.release">
    <exec executable="/usr/local/bin/hg" outputproperty="scm.version.tag.id">
        <arg value="id"/>
        <arg value="-i"/>
    </exec>
    <filter token="build.version.tag" value="${scm.version.tag.id}" />
    <copy file="${web.home}/WEB-INF/web.xml" todir="${build.home}" filtering="true" />
</target>
Run Code Online (Sandbox Code Playgroud)

在web.xml中,display-name xml元素中有一个标记,如下所示:

<display-name>My Webapp @build.version.tag@</display-name>
Run Code Online (Sandbox Code Playgroud)