代码之家  ›  专栏  ›  技术社区  ›  Adam Gent

maven+mercurial用于内部版本号

  •  4
  • Adam Gent  · 技术社区  · 14 年前

    我不知道如何在我的Maven构建中加入一个灵活的修订ID(理想情况下,我希望它出现在我的jars和war清单中)。

    我能找到的最接近的解决方案是:

    mvn -DbuildNumber=`hg id -i`
    

    这对Windows或我的Hudson服务器不太管用。 幸运的是,Hudson标记了我的构建,但是如果构建也标记了mercurial changset id,我希望得到更多的保证。

    2 回复  |  直到 7 年前
        1
  •  4
  •   Community datashaman    7 年前

    看一看 this previous question 以及与公认答案的联系。基本上,除了要使用 buildnumber:hgchangeset 用mercurial射门 changeset 内容为的属性 hg id -i .

        2
  •  1
  •   RIchard Bray    7 年前

    不幸的是, hg id -i 太长,无法使用。我创建了一个脚本,将计算准确的内部版本号。但是,有两个例外。如果分支上没有以前的版本,那么它将无效。如果本地回购协议发生变化,则其无效。在构建脚本中,每当发生这种情况时,我都将构建标记为“x.x.unstable”。

    我使用rel_模式提取当前分支中标记为实际版本的最后一个标记。然后,我通过跟踪该版本的提交日志计数+自该版本以来对分支的所有提交来计算内部版本号。

    #!/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