在java程序中使用变更集编号

时间:2013-09-18 13:24:13

标签: java ant mercurial changeset

我正在使用Mercurial HG对我的项目进行版本控制。为了使我的版本号在我的构建/编译程序中保持最新状态,我正在使用这种方法。我修改了build.xml以覆盖预定义的目标。

<target name="-pre-compile">
    <!-- getting the version in a fancy format -->
    <exec executable="hg" outputproperty="version.mercurial">
       <arg value="parent"/>
       <arg value="--template"/>
       <arg value="{latesttag}.{rev}-{branch}-{node|short}"/>
    </exec>
    <echo level="warning">Version ${version.mercurial}</echo>
    <manifest file="${manifest.file}" mode="update">
       <attribute name="Implementation-Version" value="${version.mercurial}"/>
   </manifest>
</target>

** note hg.exe在我的类路径中。

要检索版本属性,我在mainclass中使用以下代码片段

String version = Main.class.getPackage().getImplementationVersion();

当我构建我的项目并使用此java -jar myproject.jar运行它时,版本号是正确的,从那时起一切都很好。

但是当我在IDE中运行它时,版本字符串ist null,因此不会读取清单文件。 所以这让我想到这种方法是否有效还是有另一种方法,甚至更简单的方法来保持版本号的最新状态?

编辑:是否有更复杂的方法将版本号包含在您的程序中?

1 个答案:

答案 0 :(得分:0)

考虑使用Ant的output任务的<exec ..>属性来编写属性文件。然后,您可以使用<properties file="...">方法在Ant中读取它,并且可以在IDE中运行时像普通属性文件一样加载它。

对于不使用KeywordsExtension的人来说,这对您有好处。这是DVCS世界中一个可怕的解决方案。