使用mecurial分支名称作为maven版本

时间:2012-05-17 00:56:41

标签: maven mercurial versioning maven-plugin

我正在为我的maven项目设置一个mecurial存储库。

这个maven项目由几个模块组成。当我创建包含所有创建的jar的安装zip时,所有模块都具有相同的版本。

到目前为止,我已经使用父pom中的属性实现了这一点,模块在构建时使用它。到目前为止,一切工作都很顺利,当我想要更改版本时,我只有一个位置可以改变。

现在我有了使用mecurial分支名称作为maven版本的ingenius(=奇怪的)想法。

我知道我可以使用hg branch获取当前的mercurial分支名称。使用exec maven plugin应该可以在任何系统(窗口/ linux)上读取它。使用它并将其写入属性文件,我应该能够使用property plugin

再次阅读它

但是我一直在阅读分支名称并将其写入文件:

<plugin>
    <artifactId>exec-maven-plugin</artifactId>
    <groupId>org.codehaus.mojo</groupId>
    <executions>
        <execution>
            <phase>generate-sources</phase>
            <goals>
                <goal>exec</goal>
            </goals>
            <configuration>
                <executable>hg</executable>
                <arguments>
                    <argument>branch</argument>
                </arguments>
            </configuration>
        </execution>
    </executions>
</plugin>

你们其中一个人是否知道如何解决这个问题,或者有一个天才的不同解决方案,以便在建造时将mercurial分支名称放入maven pom中?

祝你好运, Xeno Lupus

1 个答案:

答案 0 :(得分:1)

我不是maven人,但听起来你可以使用outputFile on exec将输出写入文件。您可以使用以下模板让Mercurial输出有效的Java属性文件:

hg log --rev . --template 'version={branch}-{node|short}\n'

然后加载它。这种事情的一个常见模板是{latesttag}-{latesttagdistance}-{node|short}

那就是说,我当然希望maven能让你直接将命令输出发送到一个变量中,而不是先转到磁盘上的文件 - 蚁必然会这样做。