我目前正在编写一个 ANT 脚本,其中包含一些智能来检查事物。我正在使用True Blue Software的SnapshotCM作为我的版本控制,并使用CruiseControl作为我的夜间构建框架。基本上,我需要始终检查在我的版本控制中找到的最新版本并执行命令。在本例中,下面是一个示例:
<project name="nightly_build" default="main" basedir="checkout">
<target name="init">
<property file="initial.properties"/>
</target>
<target name="main" depends="init">
<!-- need some code to set variable -->
<!-- need some code to increment variable -->
<!-- need some code here to check for the latest version -->
<exec executable="C:/Program Files/True Blue Software/SnapshotCM/wco.exe">
<arg line='-f -R "C:/Work/7.10.000_Tip/7.10.000_Tip_GUI_TEST/"'/>
</exec>
</target>
</project>
在上面的代码中,我将加载"initial.properties"文件。算法应如下所示:
加载初始属性文件
获取build_number
将build_number递增 1(让这个新变量为 X)
如果找到 X,则 X 乘以 1(如果未找到,则跳到 6。
如果找到 X,则重复 4(直到找不到 X)
否则使用
<arg line ='-f -R "C:/..../7.10.100.X..../"'/>
内部的版本号
初始属性文件如下所示:
Major_Version=7
Minor_Version=10
Project_Number=100
Build_Number=036
Product_Version=${Major_Version}.${Minor_Version}.${Project_Number}.${Build_Number}
谁能指导我?
Ant 不是一种编程语言。它是一种依赖矩阵语言。
这意味着您无需在 Ant 中指定执行顺序,Ant 将计算运行目标所需的顺序。这也意味着 Ant 无法执行循环,甚至在设置属性后更改属性的值。
有一些软件包建立在 Ant 之上。旧的备用是Antcontrib。Antcontrib具有变量的概念,这些变量类似于可变属性。它还具有各种循环结构。但是,我不确定<foreach>
或<for>
任务是否会满足您的需求......
按顺序搜索下一个内部版本号是您可以在 shell 脚本中执行的操作。事实上,我强烈推荐这个。
我只将 Ant 用于构建,并将我的 CM 函数保留在我的构建.xml文件之外。相反,我依靠我的构建系统来完成与构建本身无关的所有事情。这包括签出代码、保存工件和编译单元测试。这样,如果我更改使用连续生成系统或版本控制系统的方式,则不必修改build.xml
文件。