我有一个我应该修改的ant构建脚本.具体来说,我应该进行subversion checkout条件:当前只有trunk被检出,新版本应该在需要时检查给定的分支.
<target name="do-svn-checkout" depends="init"
<property name="branch" value=""/>
<exec executable="svn">
<arg value="checkout"/>
<arg value="-r"/>
<arg value="HEAD"/>
<arg value="http://t01/java/trunk"/>
<arg value="zzz"/>
<arg value="--password"/>
<arg value="xxx"/>
<arg value="--username"/>
<arg value="yyy"/>
</exec>
</target>
Run Code Online (Sandbox Code Playgroud)
该属性branch
将通过命令行设置,例如-Dbranch=mybranch
.
如果属性branch
为空,则应检出主干,但如果属性具有任何其他值,则应检出相应的分支,如http://t01/svn/hlfg/HLFG/java/branch/the-value-of-the-property
.因此,根据属性,svn
应修改调用的相应arg值.
是否可以使用基本Ant解决此问题,还是需要使用内联脚本?
Reb*_*bse 11
当使用Ant> = 1.9.3时,使用Ant 1.9.1引入的新的if/unless功能是一块蛋糕 (但是你应该至少使用Ant 1.9.3,因为Ant 1.9.1中存在bug,请参阅此答案细节)
不要忘记激活该功能的命名空间,fe:
<project
xmlns:if="ant:if"
xmlns:unless="ant:unless"
>
<property name="foobar" value=" "/>
<echo if:blank="${foobar}">foobar blank !</echo>
<echo unless:blank="${foobar}">foobar not blank !</echo>
</project>
Run Code Online (Sandbox Code Playgroud)
在你的情况下像:
<target name="do-svn-checkout" depends="init"
<property name="branch" value=""/>
<exec executable="svn">
<arg value="checkout"/>
<arg value="-r"/>
<arg value="HEAD"/>
<arg value="http://t01/java/trunk" if:blank="${branch}">
<arg value=".." unless:blank="${branch}">
<arg value="zzz"/>
<arg value="--password"/>
<arg value="xxx"/>
<arg value="--username"/>
<arg value="yyy"/>
</exec>
</target>
Run Code Online (Sandbox Code Playgroud)
您可以定义一个包装器目标,它依赖于其他两个目标 - 其中一个执行主干检出,另一个执行分支检出 - 并且每个目标都以可选分支属性的存在为条件。
您可以进一步将 exec 调用抽象为向其传递主干或分支 url 的宏定义。
例如:
<project name="test" default="do-svn-checkout">
<target name="do-svn-checkout" depends="do-svn-trunk-checkout, do-svn-branch-checkout"/>
<target name="do-svn-trunk-checkout" unless="branch">
<svn-checkout svn-url="http://t01/svn/java/trunk"/>
</target>
<target name="do-svn-branch-checkout" if="branch">
<svn-checkout svn-url="http://t01/svn/hlfg/HLFG/java/branch/${branch}"/>
</target>
<macrodef name="svn-checkout">
<attribute name="svn-url"/>
<sequential>
<echo message="svn-url=@{svn-url}"/>
</sequential>
</macrodef>
</project>
Run Code Online (Sandbox Code Playgroud)
未定义分支属性的输出:
do-svn-trunk-checkout:
[echo] svn-url=http://t01/svn/java/trunk
do-svn-branch-checkout:
do-svn-checkout:
Run Code Online (Sandbox Code Playgroud)
定义了分支属性的输出:
do-svn-trunk-checkout:
do-svn-branch-checkout:
[echo] svn-url=http://t01/svn/hlfg/HLFG/java/branch/mybranch
do-svn-checkout:
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6573 次 |
最近记录: |