2012-08-07 6 views
10

Używam tylko apache-ant i nieant-contribargumenty podaje do apache-ant zadania exec w oparciu o wartość zmiennej

Mam ant cel

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

w którym chcę powołać exec zadanie .

Jeżeli wartość zmiennej HOST_NAME jest 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> 

Jeżeli wartość zmiennej HOST_NAME jest 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> 

Ale chciałbym napisać tylko jedno zadanie, a nie powtarzaćexec. Użyłem parametru HOST_NAME, ale co zrobić z drugim parametrem -w 10, który różni się w obu wywołaniach.

Próbowałem kilka sposobów, wyszukując na SO za pomocą condition i if else ale nic nie wydaje się być zastosowanie dla exec lub arg.

Odpowiedz

6

Spróbuj użyć macrodef. Poniższy przykład nie jest testowany.

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

Lub jeśli nie używać Przesłane:

<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

Można użyć zadania Stan:

<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

bardzo pomocny, spróbował tysięcy różnych odmian i to jest w końcu to, co zrobił sztuczka. –

+0

To jest świetne i kompaktowe. Użyłem go do warunkowego generowania raportów zasięgu kodu na podstawie parametru budowania. –

Powiązane problemy