如何编写build.xml文件,既不使用自定义代码,也不使用外部依赖项(例如shell脚本):
此外:
奖励:
git修订号创建一个变量(类似于subversion修订号)。澄清:
谢谢你举的例子。下面是一些描述如何执行类似任务的相关站点:
发布于 2009-09-20 22:14:25
build_info.properties文件:
build.major.number=00
build.revision.number=00
build.minor.number=00build.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>发布于 2009-09-16 15:13:10
构建过程
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>发布于 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平台一样。
https://stackoverflow.com/questions/1431315
复制相似问题