用于内部版本号的 Maven + Mercurial
Posted
技术标签:
【中文标题】用于内部版本号的 Maven + Mercurial【英文标题】:Maven + Mercurial for Build Numbers 【发布时间】:2011-04-25 11:28:03 【问题描述】:我不知道如何将 Mercurial 修订 ID 放入我的 Maven 构建中(理想情况下,我希望它出现在我的 jars 和 war 的清单中)。
我能找到的最接近的解决方案是:
mvn -DbuildNumber=`hg id -i`
这不适用于 Windows 或我的 Hudson 服务器。 幸运的是,Hudson 标记了我的构建,但如果构建也使用 Mercurial changset id 进行标记,我希望得到更多保证。
【问题讨论】:
【参考方案1】:查看this previous question 和已接受答案的链接。基本上,您想要做同样的事情,只是您需要使用带有 Mercurial 的 buildnumber:hgchangeset
目标来获取内容为 hg id -i
的 changeset
属性。
【讨论】:
【参考方案2】:很遗憾,hg id -i
太长,无法使用。我创建了一个脚本来计算准确的内部版本号。但是,有两个例外。如果分支上没有以前的版本,则它不能有效。如果本地 repo 有变化,那么它是无效的。在我的构建脚本中,每当发生这种情况时,我都会将构建标记为“x.x.UNSTABLE”。
我使用 REL_PATTERN 来获取当前分支中标记为实际发布的最后一个标签。然后我通过跟踪该版本的提交日志计数 + 自该版本以来对分支的所有提交来计算内部版本号。
#!/bin/bash
REL_PATTERN="release-[0-9]*\.[0-9]*\.[0-9]*"
BRANCH=$( hg branch )
CURR_REV=$( hg id -n )
if [ "$CURR_REV: -1" = "+" ] ; then
echo "ERROR: This workspace contains uncommitted code. Cannot calculate build number" >&2
echo "UNSTABLE"
exit 1
fi
RELEASE=$( hg log --rev="branch($BRANCH) and tag() and 1:$CURR_REV" -T "tags rev\n"|grep "$REL_PATTERN "|tail -1 )
if [ "$RELEASE" = "" ] ; then
echo "ERROR: Unable to locate version tag" >&2
echo "UNSTABLE"
exit 1
fi
RELEASE_REV=$( echo $RELEASE|cut -f 2 -d ' ' )
RELEASE_TAG=$( echo $RELEASE|cut -f 1 -d ' ' )
REVS=$( hg log -P $RELEASE_REV -b $BRANCH -T "rev\n"|wc -l )
BUILD=$( hg log -r1:$CURR_REV -P $RELEASE_REV -b $BRANCH -T "rev\n"|wc -l )
echo "BRANCH=$BRANCH" >&2
echo "CURR_REV=$CURR_REV" >&2
echo "RELEASE_REV=$RELEASE_REV" >&2
echo "RELEASE_TAG=$RELEASE_TAG" >&2
echo "BUILD=$BUILD" >&2
echo $BUILD
【讨论】:
以上是关于用于内部版本号的 Maven + Mercurial的主要内容,如果未能解决你的问题,请参考以下文章