11

我只使用apache-ant不是 ant-contrib

我有一个ant目标

<target name="stop" depends="init" >
...
</target>

我想在其中调用exec任务。

如果变量的HOST_NAME值为all

<exec executable="${executeSSH.shell}" >
    <arg value="-h ${HOST_NAME}" />
    <arg value="-i ${INSTANCE}" />
    <arg value="-w 10" />
    <arg value="-e ${myOperation.shell} " />
    <arg value=" -- " />
    <arg value="${INSTANCE} ${USERNAME} ${PASSWORD}" />
</exec>

如果变量的HOST_NAME值为anything else

<exec executable="${executeSSH.shell}">
    <arg value="-h ${HOST_NAME}" />
    <arg value="-i ${INSTANCE}" />
    <arg value="-e ${myOperation.shell} " />
    <arg value=" -- " />
    <arg value="${INSTANCE} ${USERNAME} ${PASSWORD}" />
</exec>

但我只想写一个任务而不是重复exec。我已经使用HOST_NAME了参数,但是如何处理-w 10两个调用中不同的第二个参数。

我已经尝试了几种方法,通过使用搜索 SO conditionif else但似乎没有任何方法适用于execor arg

4

2 回答 2

12

您可以使用条件任务:

<condition property="my.optional.arg" value="-w 10" else="">
    <equals arg1="${HOST_NAME}" arg2="all" />
</condition>

<exec executable="${executeSSH.shell}" >
    <arg value="-h ${HOST_NAME}" />
    <arg value="-i ${INSTANCE}" />
    <arg line="${my.optional.arg}" />
    <arg value="-e ${myOperation.shell} " />
    <arg value=" -- " />
    <arg value="${INSTANCE} ${USERNAME} ${PASSWORD}" />
</exec>
于 2013-11-22T09:19:56.247 回答
6

尝试使用宏定义。以下示例未经测试。

<macrodef name="callSSH">
    <element name="extArgs" optional="y"/>
    <sequential>
        <exec executable="${executeSSH.shell}" >
            <arg value="-h ${HOST_NAME}" />
            <arg value="-i ${INSTANCE}" />
            <extArgs/>
            <arg value="-e ${myOperation.shell} " />
            <arg value=" -- " />
            <arg value="${INSTANCE} ${USERNAME} ${PASSWORD}" />
        </exec>
    </sequential>
</macrodef> 
<target name="stop" depends="init" >
    <if>
       <equals arg1="${HOST_NAME}" arg2="all"/>
        <then>
            <callSSH>
                <extArgs>
                    <arg value="-w 10" />
                </extArgs>
            </callSSH>
        </then>
        <else>
            <callSSH>
                <extArgs/>
            </callSSH>
        </else>
    </if>
</target>

或者,如果您不使用贡献:

<target name="sshExecWithHost" if="HOST_NAME"> 
    <callSSH>
        <extArgs>
            <arg value="-w 10" />
        </extArgs>
    </callSSH>
</target>

<target name="sshExecNoHost" unless="HOST_NAME">
    <callSSH/>
</target>

<target name="sshSwitch" depends="sshExecNoHost,sshExecWithHost">
</target>

<target name="stop" depends="init,sshSwitch" >
</target>
于 2012-08-07T11:33:45.460 回答