2016-04-18 11 views
0

Ich habe ein Ziel, das eine Aufgabe ausführt, die eine Eigenschaft festlegt. Ein anderes Ziel überprüft diese Eigenschaft und wenn es wahr ist, ruft es das erste Ziel erneut auf. Aber sobald das erste Ziel ausgeführt wird und die Eigenschaft festgelegt wird, wird sie nie wieder geändert. (Und ich weiß, sollte es zu ändern, weil ich die Bedingung args ändern sehen)Das mehrfache Aufrufen eines Ameisenziels setzt eine Eigenschaft nicht zurück

(Ich kann nicht contrib Bibliothek installieren - meine Wahl nicht - also bin ich stecken diese Arbeit um zu tun)

<target name="check-service-state"> 

    <!-- See if the service is running or not --> 
    <exec executable="ssh" outputproperty="service.state" failonerror="false"> 
     <arg value="-t" /> 
     <arg value="-t" /> 
     <arg value="${username}@${ssh.host}" /> 
     <arg value="sudo initctl list | grep ${service.name}" /> 
    </exec> 

    <condition property="service.running" else="false"> 
     <or> 
      <contains string="${service.state}" substring="start/running" /> 
     </or> 
    </condition> 
    <echo message="${service.running}" />    
</target> 

<target name="restart-service" depends="stop-service"> 

    <!-- Check if service stopped --> 
    <antcall target="check-service-state" /> 
    <sleep seconds="1" /> 

    <!-- now try to start again, or wait and recheck --> 
    <antcall target="service-not-stopped" /> 
    <antcall target="service-stopped" /> 

</target> 

<target name="wait-for-service"> 

    <!-- Check if service stopped --> 
    <antcall target="check-service-state" /> 

    <!-- now try to start again --> 
    <antcall target="service-not-stopped" /> 
    <antcall target="service-stopped" /> 

</target> 

<!-- Acts as a loop/wait check for service stopping --> 
<target name="service-not-stopped" if="${service.running}"> 
    <echo message="${service.state}" /> 
    <antcall target="wait-for-service" /> 
</target> 

<!-- Acts as a break from the loop/check for service stopping --> 
<target name="service-stopped" unless="${service.running}"> 
    <antcall target="start-service" /> 
</target> 

Die Die Eigenschaft service.running ändert sich nur einmal und bleibt dann immer wahr, obwohl sie jetzt falsch sein sollte.

Antwort

1

Eigenschaften sind unveränderlich in ANT, weshalb es nicht ändert, sobald es das erste Mal gesetzt wird. This stackoverflow thread gibt ein paar Workarounds. Ich habe persönlich Javascript verwendet diese Adresse, wie in den obigen Link beschrieben:

<scriptdef name="propertyreset" language="javascript" description="Allows to assign @{property} new value"> <attribute name="name"/> <attribute name="value"/> project.setProperty(attributes.get("name"), attributes.get("value")); </scriptdef>

Verbrauch:

<property name="x" value="10"/> 
<propertyreset name="x" value="11"/> 
<echo>${x}</echo> <!-- will print 11 --> 
+0

Und wird diese Arbeit in Ant (1.9.6) ohne contrib? –

+2

@DonRhummy Hängt mehr von Ihrer JVM ab. Javascript (Rhino) wurde mit Java6 gebündelt, Java8 hat eine neuere Javascript-Engine namens Nashorn. –

Verwandte Themen