11

私は使用しているだけで、使用apache-antしていません ant-contrib

私にはant目標があります

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

execタスクを呼び出したい。

変数の値HOST_NAMEall

<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_NAMEanything 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>

しかし、私は1つのタスクだけを書き、繰り返さないようにしたいと思いますexec。パラメータを使用しましたが、両方の呼び出しで異なるHOST_NAME2番目のパラメータをどうするか。-w 10

conditionを使用してSOを検索することでいくつかの方法を試しましたが、またはif elseに適用できるものはないようです。execarg

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>

または、contribs を使用しない場合:

<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 に答える