发布
社区首页 >问答首页 >如何有条件地设置exec任务的arg值?

如何有条件地设置exec任务的arg值?
EN

Stack Overflow用户
提问于 2014-09-16 17:05:34
回答 2查看 7.6K关注 0票数 10

我有一个ant构建脚本,我应该修改它。具体地说,我应该设置subversion签出条件:目前只签出主干,如果需要,新版本应该签出给定的分支。

代码语言:javascript
代码运行次数:0
复制
<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>

属性branch将通过命令行设置,例如-Dbranch=mybranch

如果属性branch为空,则应该签出主干,但是如果属性有任何其他值,则应该签出相应的分支,如http://t01/svn/hlfg/HLFG/java/branch/the-value-of-the-property。因此,根据属性的不同,应该修改svn调用的相应arg值。

有没有可能用基本的Ant来解决这个问题,或者我需要使用内联脚本?

EN

回答 2

Stack Overflow用户

发布于 2014-09-16 17:25:19

使用AntAnt1.9.3对the new if/unless feature introduced with Ant 1.9.1来说是小菜一碟(但你至少应该使用>= 1.9.3,因为Ant1.9.1,see this answer for details中的but)

别忘了激活该功能的命名空间,f.e。:

代码语言:javascript
代码运行次数:0
复制
<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>

在您的示例中,类似于:

代码语言:javascript
代码运行次数:0
复制
<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>
票数 13
EN

Stack Overflow用户

发布于 2014-09-16 17:15:51

您可以定义一个包装器目标,它依赖于另外两个目标-一个执行主干结帐,另一个执行分支结帐-并且每个目标都是conditional,只要存在可选的分支属性。

您可以进一步将exec调用抽象为一个macrodef,您可以将主干或分支url传递到该url。

例如:

代码语言:javascript
代码运行次数:0
复制
<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>

未定义分支属性的输出:

代码语言:javascript
代码运行次数:0
复制
do-svn-trunk-checkout:
     [echo] svn-url=http://t01/svn/java/trunk

do-svn-branch-checkout:

do-svn-checkout:

定义了分支属性的输出:

代码语言:javascript
代码运行次数:0
复制
do-svn-trunk-checkout:

do-svn-branch-checkout:
     [echo] svn-url=http://t01/svn/hlfg/HLFG/java/branch/mybranch

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

https://stackoverflow.com/questions/25864709

复制
相关文章

相似问题

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