构建数字:major.minor.revision(Build numbers: major.min

2019-07-18 04:51发布

你怎么会写build.xml文件,既没有使用自定义代码,也没有外部依赖(如shell脚本),即:

  • 生成表单major.minor.revision(例如,34年2月1日 )的版本号。
  • 自动递增的源代码的编译每个修订。
  • 自动增量上的DIST(ribution)任务的每个执行的次要版本。

另外:

  • 提供了一个选项,以增加主号码。
  • 提供了一个选项,以递增次编号。
  • 当主设备号递增,次要和修订号设置为0。
  • 每当小的数目递增,版本号为0。

奖金:

  • 创建基于所述可变git修订号(如颠覆修订号)。

澄清:

  • 自动检测(或承诺)是不需要的。
  • 与Subversion集成是不希望的。

谢谢你的任何例子。 下面是一些相关网站,描述了如何执行类似的任务:

  • 创建一个内部版本号与蚂蚁。
  • 使用BuildNumber Ant任务。
  • Ant和构建版本号。

Answer 1:

build_info.properties文件:

build.major.number=00
build.revision.number=00
build.minor.number=00

build.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<project name="project" default="current-number">

<property file="build_info.properties"/>
<property name="build.number" value="${build.major.number}.${build.minor.number}.${build.revision.number}"/>

<target name="current-number">
 <echo>Current build number:${build.number}</echo>
</target>

<target name="compile">
   <antcall target="revision"></antcall>
</target>

<target name="dist">
  <antcall target="minor"></antcall>
</target>

<target name="revision">
    <propertyfile  file="build_info.properties">
            <entry key="build.revision.number" type="int" operation="+" value="1" pattern="00"/>
    </propertyfile>
</target>

<target name="minor">
    <propertyfile  file="build_info.properties">
            <entry key="build.minor.number" type="int" operation="+" value="1" pattern="00"/>
            <entry key="build.revision.number" type="int" value="0" pattern="00"/>
    </propertyfile>
</target>

<target name="major">
    <propertyfile  file="build_info.properties">
            <entry key="build.major.number" type="int" operation="+" value="1" pattern="00"/>
            <entry key="build.minor.number" type="int" value="0" pattern="00"/>
            <entry key="build.revision.number" type="int" value="0" pattern="00"/>
    </propertyfile>
</target>

<target name="all">
    <propertyfile  file="build_info.properties">
            <entry key="build.major.number" type="int" operation="+" value="1" pattern="00"/>
            <entry key="build.minor.number" type="int" operation="+" value="1" pattern="00"/>
            <entry key="build.revision.number" type="int" operation="+" value="1" pattern="00"/>
    </propertyfile>
</target>

</project>


Answer 2:

该解决方案将自动执行增量较小或版本号,如果编译或目标dist已被选中。 如果下列性质中的一种已设置的增量可以被关闭:

  • -Dno.increment.minor =真
  • -Dno.increment.revision =真

如果属性inc.major已定,那么主设备号将被增加和其他两个值将被设置为零。 在SHA-1的校验和正由版本文件的文本表示来计算。

顺便说一句:如果将被允许,你可以创建在Java脚本,它包含在JDK 6您自己的Ant任务。

现在,这里的蚂蚁文件

<?xml version="1.0" encoding="UTF-8"?>
<project name="Numbers" default="dist" basedir=".">

    <property name="version.file" location="${basedir}/version.properties"/>

    <target name="inc.revision.properties" unless="no.increment.revision">
        <propertyfile file="${version.file}">
            <entry key="minor.number" default="00" operation="=" pattern="00" type="int"/>
            <entry key="major.number" default="00" operation="=" pattern="00" type="int"/>
            <entry key="build.number" default="00" operation="+" pattern="00" type="int"/>
        </propertyfile>
    </target>

    <target name="inc.minor.properties" unless="no.increment.minor">
        <propertyfile file="${version.file}">
            <entry key="minor.number" default="00" operation="+" pattern="00" type="int"/>
            <entry key="major.number" default="00" operation="=" pattern="00" type="int"/>
            <entry key="build.number" value="00" operation="="  type="int"/>
        </propertyfile>
    </target>

    <target name="inc.major" if="inc.major">
        <property name="no.increment.minor" value="true" />
        <property name="no.increment.revision" value="true" />
        <propertyfile file="${version.file}">
            <entry key="minor.number" value="00" operation="=" pattern="00" type="int"/>
            <entry key="major.number" default="00" operation="+" pattern="00" type="int"/>
            <entry key="build.number" value="00" operation="=" pattern="00" type="int"/>
        </propertyfile>
        <load.version.info/>
    </target>

    <target name="inc.minor" depends="inc.major,inc.minor.properties">
        <property name="no.increment.revision" value="true"/>
        <load.version.info/>
    </target>

    <target name="inc.revision" depends="inc.major,inc.revision.properties">
        <load.version.info/>
    </target>

    <macrodef name="load.version.info">
        <sequential>
            <property file="${version.file}"/>
            <checksum file="${version.file}" property="sha1.number" algorithm="SHA" format="CHECKSUM"/>
            <echo>Version: ${major.number}.${minor.number}.${build.number}</echo>
            <echo>SHA1: ${sha1.number}</echo>
        </sequential>
    </macrodef>

    <target name="compile" depends="inc.revision" description="Compile Task"/>

    <target name="dist" depends="inc.minor, compile" description="Dest Task"/>

</project>


Answer 3:

构建过程

  1. build_info.properties将构建过程中的项目文件夹中创建你可以写你的构建在这个文件中的所有信息。
    • 像集结号,主要与释放,时间戳的次要号码,以及版本号。
  2. 构建脚本可以修改这些值怎么过你的想
  3. 之后,构建了全成提交的文件“build_info.properties”回资源库

在发展

首先构建之后的文件build_info.properties将被放置在仓库中。 当过你愿意,你可以通过你的自我改变,并提交任何数量(主要,次要,内部版本号),或建立一个像在下面的例子中build.number自动增加它。

svnant例

使用svnant 1.3.0:

<target name="checkout">
    <echo>Checking out revision ${param_SubProjectSvnREV} of project: ${param_SubProjectSvnName}</echo>
    <svn username="${svnant.repository.user}" password="${svnant.repository.passwd}">
        <checkout url="${svnant.latest.url}/${param_SubProjectSvnName}/" revision="${param_SubProjectSvnREV}" destPath="${all.projects.dir}/${param_SubProjectDirName}" />
        <info target="${all.projects.dir}/${param_SubProjectDirName}" ></info>
    </svn>
    <propertyfile  file="${all.projects.dir}/${param_SubProjectDirName}/build_info.properties" comment="Modify build numbers in a properties file.">
        <entry key="build.number" type="int" operation="+" value="1" pattern="00"/><!--increment it here -->
        <entry key="build.revision" type="string" value="${svn.info.rev}"/>
        <entry key="build.major.number" default="01"/><!-- can do some logic here to increase the values, or write value from somewhere else-->
        <entry key="build.minor.number" default="01"/><!-- can do some logic here to increase the values, or write value from somewhere else-->
    </propertyfile>
</target>

<target name="compile" depends="checkout">
    <property file="${all.projects.dir}/${param_SubProjectDirName}/build_info.properties" />
    <mkdir dir="${release.name}/${param_SubProjectDirName}/${build.major.number}.${build.minor.number}.${build.number}" />
    <!-- compile it to the new folder, an so on... -->
    <!-- after all, if the build wass successfull, commit the file 'build_info.properties' back to repository --> 
</target>


Answer 4:

这样做的最简单的方法是改变的问题。 相反,使得任何构建为你做这个,有你正在调用Ant的计算版本号应该是什么,然后不管过程传递中作为一个属性如

蚂蚁-Dbuild.version = 1.2.3

这有什么构建你与能够采取从它的任何线索,如SVN修订,当前的日期和时间,或任何工作的灵活性。

蚂蚁-Dbuild.version = svnversion .

蚂蚁-Dbuild.version = date +"%Y%m%d%H%D"

蚂蚁-Dbuild.version = $ {}大。 svnversion .date +"%Y%m%d%H%D"

等你可以得到,如果你想非常全面。

如果你想有一个不断递增的数字,那么你可以将其存储在一个文件,然后通过在编译时。 例如,你可以这样做:

VER = cat build.version VER = $((VER + 1))回波$ VER> build.version

最后,如果你真的希望这是在build.xml文件,做的最好的事情是有一个单独的任务来执行增量及建造选项,叉掉嵌套Ant构建你的“主”的目标。 因此,你会最终

蚂蚁 - >蚂蚁-Dbuild.version = 1.2.3.4 - > ...

换句话说,给出“打造”的(当前)默认的build.xml文件,然后将其更改为“版本”,并有蚂蚁“版本的任务做计算,然后嵌套调用和建设。

实施就留给读者做练习,因为在翻译方法在非UNIX平台。



Answer 5:

在我的项目,我不自动增加主要和次要号码。 我们从全球的生成属性设置。 像那样:

<entry key="build.major.number" value="${global.release.major}"></entry> 
<entry key="build.minor.number" value="${global.release.minor}"></entry>

这是因为他们将释放被改变(不适用于测试或其他版本),并承诺与其他资源一起(我们能够建立一些旧的或分支版本)。

但是,如果你想增加次要号码,你可以不喜欢它在我的例子内部版本号。

<entry key="build.major.number" type="int" operation="+" default="1" pattern="00"/>


Answer 6:

这是前一阵子,所以这是从内存:

我建立一个打勾了版本号上的每个建立一个自定义CruiseControl.Net贴标机块。 它保持一个XML文件的版本号的所有4个组成部分,并通过名称来识别每个项目(因此它可以支持多个项目)。

它产生四个值传递到构建过程(恶性,在我们的例子),其中有调整所有的AssemblyInfo.cs文件,以反映正确的版本号的责任。

编辑要注意:这都会自动勾选起来的唯一价值是内部版本号。 主要/次要版本号在CC.Net项目配置中指定。 内部版本号重新启动在0001在主要或次要版本号(例如,每个变化,如果从7.1版本就到7.3版本,例如,7.1构建可能是在版本号783,但第7.3构建开始集结号1,挨着7.1构建将建立784。

更改版本号只需要调整1设置CC.Net配置文件。



Answer 7:

我们可以使用条件来检查我们是否应该增加微,主要和次要版本。

增加次要如果微为9,等等。

      <target name="increaseBuildNumber" depends="increase.micro, increase.minor, increase.major" description="Increase Build Number"/>

      <target name="increase.micro" if ="microNotEquals9">
            <propertyfile file="build.properties">
                <entry key="micro.number" default="0" operation="+"    pattern="0" type="int"/>
            </propertyfile>

    </target>

    <target name="increase.minor" if = "microEquals9andMinorNotEquals9">
            <propertyfile file="build.properties">
                <entry key="minor.number" default="0" operation="+" pattern="0" type="int"/>
                <entry key="micro.number" value="0" operation="=" pattern="0" type="int"/>
            </propertyfile>

    </target>

    <target name="increase.major" if = "microAndMinorEquals9" >
            <propertyfile file="build.properties">
                <entry key="major.number" default="0" operation="+" pattern="0" type="int"/>
                <entry key="minor.number" value="0" operation="=" pattern="0" type="int"/>
                <entry key="micro.number" value="0" operation="=" pattern="0" type="int"/>
            </propertyfile>


    </target>

    <condition property="minorEquals9"> 
           <equals arg1="${minor.number}" arg2="9"/>
    </condition>

    <condition property="microEquals9andMinorNotEquals9"> 
            <and> 
                <equals arg1="${micro.number}" arg2="9"/> 
                <not><equals arg1="${minor.number}" arg2="9"/></not>
            </and>
    </condition>

    <condition property="microAndMinorEquals9"> 
            <and> 
                <equals arg1="${micro.number}" arg2="9"/> 
                <equals arg1="${minor.number}" arg2="9"/>
            </and>
    </condition>

    <condition property="microNotEquals9"> 
            <not><equals arg1="${micro.number}" arg2="9"/></not>
    </condition>


文章来源: Build numbers: major.minor.revision