# Probleme mit konditionalem Ameisenziel



## NTB (12. Okt 2007)

Eigentlicher Titel: "Probleme mit konditionalem ANT Target" <- durfte ich aber aus 'Spamschutzgründen' nicht verwenden :autsch: 

Hi,

ich möchte ein ANT Target nur unter einer bestimmten Bedingung ausführen lassen. Leider klappt das nicht; das Target wird nicht ausgeführt, obwohl die Variable gesetzt wird. Eigentlich sollte da nicht so viel falsch zu machen sein. Hier ein KSBK:

```
<project>
	<property name="foo" value="true"/>
	
	<target name="test" if="${foo}">
		<echo message="Hello World ${foo}"/>
	</target>
</project>
```

Siehe dazu auch: http://ant.apache.org/manual/index.html

Dort heisst es, dass die Variable lediglich gesetzt sein muss. Nehme ich das "if" raus, funktioniert das ganze natürlich. Auch, wenn ich stattdessen "unless" einsetze. D.h. er denkt die Variable sei gesetzt. Sie IST es aber.

Ich führe es mit Eclipse Europa Fall halt in dem ANT Fenster aus. 

Bin ich tatsächlich zu blöd dazu?


----------



## Guest (12. Okt 2007)

Etwas gewöhnungsbedürftig. Ich verstehe es so, dass der Name des Property genannt werden muss, nicht der Wert.


```
<project default="test"> 
   <property name="foo" value="false"/> 

   <target name="test" if="foo"> 
      <echo message="Hello World ${foo}"/> 
   </target> 
</project>
```
Funktioniert aber nicht.

Das hier geht aber, macht das ganze aber etwas umständlich.
	
	
	
	





```
<project default="test"> 
   <property name="foo" value="false"/> 
    
   <condition property="foo.set">
      <istrue value="${foo}"/>
   </condition>	
	
   <target name="test" if="foo.set"> 
       <echo message="Hello World ${foo}"/> 
   </target> 
</project>
```


----------



## NTB (13. Okt 2007)

Ahhh ich habs kapiert... Und Du hattest recht:

```
<project default="test">
   <property name="foo" value="false"/>

   <target name="test" if="foo">
      <echo message="Hello World ${foo}"/>
   </target>
</project>
```

Das funktioniert bei mir zumindest!

Der springende Punkt: 
if="foo"   vs   if="${foo}"


----------



## Guest (13. Okt 2007)

In der Ant-Version 1.7.0 (in Eclipse JEE dabei) wird die Bedingung bei mir ignoriert, wenn ich es in Eclipse
starte.  ???:L


----------



## NTB (14. Okt 2007)

Wie sieht Dein build File genau aus?


----------



## Guest (15. Okt 2007)

Genau so, wie oben angegeben. Nur die Version mit den Condition-Tags funktioniert. Die kürzere Variante nicht.

Das hier funktioniert, wie es soll ("test" wird nicht ausgeführt)
	
	
	
	





```
<project default="test"> 
   <property name="foo" value="false"/> 
    
   <condition property="foo.set">
	  <istrue value="${foo}"/>
   </condition>	
	
   <target name="test" if="foo.set"> 
      <echo message="Hello World ${foo}"/> 
   </target> 
</project>
```
Das hier funktioniert nicht ("test" wird ausgeführt)
	
	
	
	





```
<project default="test"> 
   <property name="foo" value="false"/> 
    
   <target name="test" if="foo"> 
      <echo message="Hello World ${foo}"/> 
   </target> 
</project>
```
Nicht das ich es momentan brauchen würde, aber wo ich es probiert habe, als du deine Frage gestellt hast,
bin ich auch etwas ins Grübeln gekommen.


----------



## NTB (15. Okt 2007)

Anonymous hat gesagt.:
			
		

> Das hier funktioniert nicht ("test" wird ausgeführt)
> 
> 
> 
> ...




Ist doch korrekt! 


			
				http://ant.apache.org/manual/using.html#targets hat gesagt.:
			
		

> In the first example, if the module-A-present property is set (to any value, e.g. false), the target will be run.



Es geht darum, _ob_ die Variable gesetzt ist. In Deinem Beispiel ist die Variable foo gesetzt, also wird Hello World ausgegeben. Der Inhalt der Variable spielt keine Rolle...


----------



## Guest (16. Okt 2007)

Jetzt habe ich es kapiert. :autsch: Es prüft, wie es aussieht, ob "foo" im aktuellen Scope überhaupt definiert ist. 
Da könnte ich auch
	
	
	
	





```
<property name="foo" value="Hafergrütze"/>
```
 schreiben.


----------



## NTB (16. Okt 2007)

Jawoll!


----------

