首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >版本号: major.minor.revision

版本号: major.minor.revision
EN

Stack Overflow用户
提问于 2009-09-16 06:37:07
回答 6查看 30K关注 0票数 40

如何编写build.xml文件,既不使用自定义代码,也不使用外部依赖项(例如shell脚本):

  • 生成表单major.minor.revision的版本号(例如,01.02.34)。
  • 自动增加每次编译源代码的修订。
  • 在每次执行dist(分发)任务时自动增加次要版本。

此外:

  • 提供一个增加主数字的选项。
  • 提供一个增加次要数字的选项。
  • 每当主数字递增时,次要数字和修订编号就被设置为0。
  • 每当次要数字增加时,修订编号就被设置为0。

奖励:

  • 根据git修订号创建一个变量(类似于subversion修订号)。

澄清:

  • 不需要自动签出(或提交)。
  • 不希望与Subversion集成。

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

  • 用Ant创建一个构建号
  • 使用BuildNumber Ant任务。
  • Ant和构建版本数。
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2009-09-20 22:14:25

build_info.properties文件:

代码语言:javascript
复制
build.major.number=00
build.revision.number=00
build.minor.number=00

build.xml文件:

代码语言:javascript
复制
<?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>
票数 54
EN

Stack Overflow用户

发布于 2009-09-16 15:13:10

构建过程

  1. build_info.properties将在生成过程中在项目文件夹中创建,您可以在此文件中写入有关生成的所有信息。
    • 如版本号、主要和次要发布号、时间戳和修订号。

  1. 构建脚本可以随时修改这些值。
  2. 构建成功后,将文件'build_info.properties‘提交回存储库

在发展中

在第一次构建文件之后,build_info.properties将被放置在存储库中。您可以在任何时候自己更改和提交任何数字(主要、次要、生成编号),或者在构建过程中自动增加它,如下面的示例中的build.number。

svnant示例

使用svnant 1.3.0:

代码语言:javascript
复制
<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>
票数 3
EN

Stack Overflow用户

发布于 2009-09-19 17:27:17

最简单的方法就是改变问题。与其让任何构建为您完成此操作,不如让您调用的任何进程计算版本号,然后将其作为属性传入。

ant -Dbuild.version=1.2.3

这具有您所使用的任何构建的灵活性,您可以从任何东西(如SVN修订版、当前日期和时间,或者其他什么版本)中得到它的提示。

蚂蚁-Dbuild.version=svnversion .

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

ant -Dbuild.version=${major}.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 (当前)默认值为“build”,那么将其更改为“version”,然后让ant 'version任务执行计算,然后是嵌套的调用和构建。

实现作为练习留给读者,就像将方法转换到非UNIX平台一样。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1431315

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档