2012-08-07 9 views
10

ich nur apache-ant und nichtant-contribPass Argumente für Apache-Ant-Task exec basierend auf den Wert der Variablen

Ich habe ein ant Ziel

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

, in dem ich exec Aufgabe aufrufen möchten bin mit .

Wenn der Wert einer Variablen HOST_NAME ist 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> 

Wenn der Wert einer Variablen HOST_NAME ist 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> 

Aber ich würde nur eine Aufgabe schreiben und nicht zu wiederholenexec. Ich habe HOST_NAME Parameter verwendet, aber was ist mit dem zweiten Parameter -w 10 zu tun, der in beiden Aufrufen unterschiedlich ist.

Ich habe versucht, ein paar Möglichkeiten, mit SO Suche auf durch condition und if else aber nichts mit scheint für exec oder arg anwendbar.

Antwort

6

Versuchen Sie es mit Macrodef. Das folgende Beispiel wird nicht getestet.

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

Oder, wenn Sie nicht contribs verwenden:

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

Sie können die Bedingung Aufgabe verwenden:

<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> 
+2

Sehr hilfreich, tausend verschiedene Varianten ausprobiert und das ist schließlich, was tat der Trick. –

+0

Das ist großartig und kompakt. Ich habe es verwendet, um Code-Coverage-Berichte basierend auf einem Build-Parameter bedingt zu erstellen. –

Verwandte Themen