我正在为使用以下格式的版本控制的应用程序开发Ant构建过程:major.minor.buildcount。所以目前应用程序大约是2.1.52,我们在2.1版本上,并且已经有35个版本。
我现在正在添加一个蚂蚁目标,询问用户是否要推进主要版本和/或次要版本。
当我从命令行运行目标时,我想遵循以下内容:
@@ ant version
Versioning application...
Would you like to advance the major version to 3? (Y|n)
@@ n
Not Advancing major version
Would you like to advance the minor version to 2? (y|N)
@@ y
Advancing minor version
前面带有@@的行是我想要的用户输入。我的主要和次要版本存储在build.properties文件中。
到目前为止,这是我的代码
<?xml version="1.0"?>
<project name="StudentMS" default="zip" basedir=".">
<propertyfile file="./.ant/build.properties">
<entry key="version.buildnumber" type="int" default="0" operation="+" pattern="00" />
</propertyfile>
<property file="./.ant/build.properties" />
<property name="sourceDir" location="/Users/dave/Workspace/ColdFusion/StudentMs" />
<property name="buildDir" location="${sourceDir}/builds" />
<target name="version" description="Adds a major and minor version to the build.">
<input message="Advance major version? ${version.major}" addproperty="updatemajor" validargs="y,n" defaultvalue="n" />
<propertyfile file="./.ant/build.properties">
<entry key="version.major" type="int" default="0" operation="+" pattern="00" />
</propertyfile>
<input message="Advance minor version? ${version.minor}" addproperty="updateminor" validargs="y,n" defaultvalue="y" />
<propertyfile file="./.ant/build.properties">
<entry key="version.minor" type="int" default="0" operation="+" pattern="00" />
</propertyfile>
</target>
</project>
我的build.properties
#Tue, 29 Mar 2011 11:46:30 -0400
version.buildnumber=35
version.major=2
version.minor=1
我仍然是Ant的新手,所以我很抱歉我无法发布更高级的代码。所以我需要做的第一件事就是在我的属性文件编辑中添加一些条件。
答案 0 :(得分:7)
你可以通过结合条件和反调用任务以及添加一些额外的目标来实现你想要的。
我认为这样的事情应该有效:
<property file="./.ant/build.properties" />
<property name="sourceDir" location="/Users/dave/Workspace/ColdFusion/StudentMs" />
<property name="buildDir" location="${sourceDir}/builds" />
<target name="version" description="Adds a major and minor version to the build.">
<input message="Advance major version? ${version.major}" addproperty="updatemajor" validargs="y,n" defaultvalue="n" />
<condition property="executeMajor">
<and>
<isset property="updatemajor" />
<equals arg1="${updatemajor}" arg2="y" />
</and>
</condition>
<antcall target="update_major" />
<input message="Advance minor version? ${version.minor}" addproperty="updateminor" validargs="y,n" defaultvalue="y" />
<condition property="executeMinor">
<and>
<isset property="updateminor" />
<equals arg1="${updateminor}" arg2="y" />
</and>
</condition>
<antcall target="update_minor" />
</target>
<target name="update_major" if="executeMajor">
<!-- Code to update major here -->
</target>
<target name="update_minor" if="executeMinor">
<!-- Code to update minor here -->
</target>
基本上,它的作用是在updatemajor / updateminor设置为“y”的情况下设置executeMajor和executeMinor属性。然后,只要设置了executeMajor / Minor变量,ant就会运行更新目标,否则它将跳过它们。
答案 1 :(得分:0)
替代方案将支持用户输入和无人参与构建。
您可以在命令行上定义ant属性。所以,当你想推进一个版本时,你可以这样做:
ant -Dbuild.version.advanceMinor=true
这种方法还可以避免大多数构建的额外步骤。