2010-04-09 12 views
13

Sto provando a utilizzare il ciclo foreach in uno script Ant ma ottengo il messaggio: Problema: impossibile creare attività o digitare foreach Causa: il nome non è definito .Risoluzione dei problemi "impossibile creare attività o digitare foreach" quando si utilizza <foreach>

Non capisco perché questo non funziona. Non è una libreria di terze parti. È un compito standard che farebbe parte dell'ultima versione di Ant (1.8).

<target name="parse"> 
    <echo message="The first five letters of the alphabet are:"/> 

    <foreach param="instance" list="a,b,c,d,e"> 

    </foreach> 
</target> 

risposta

20

Si tratta di un compito standard che sarebbe parte della versione più recente di Ant (1.8).

No, non lo è. Almeno non riesco a trovarlo nell'elenco delle attività principali e opzionali nello ant manual. Sembra essere parte di ant-contrib project e quindi deve essere installato separatamente.

+0

aggiornamento a 1.9 [dall'1.7] sembra aver risolto questo problema per me [in questo caso, ho dovuto impostare ANT_HOME al mio ant antistrot 1.9, quindi funziona] – rogerdpack

3

Ho avuto lo stesso problema in Eclipse con le varie versioni di formica.

Aggiungere questo nel codice senza l'aggiunta di parametri sotto Eclipse (non specifica alcun percorso di classe):

<taskdef resource="net/sf/antcontrib/antcontrib.properties" classpath="/path/to/ant-contrib/ant-contrib-1.0b3.jar"/> 
+0

Quando dico varie versioni: ie 1.6 e 1.7 ...^_^ma prima prova questo come una terza festa. – julia2020

4

Hai mai considerato <script>? in questo tag puoi usare alcuni famosi linguaggi di script come javascript e python. possono anche interagire con il Progetto, il compito ... Oggetto di Ant, che significa che è possibile impostare/ottenere le proprietà e persino eseguire un'altra operazione. Guarda questo esempio che proviene dal libro "sviluppo Java con la formica"

<project name="script_example" default="test-random"> 
     <description> 
     Use a script task to generate a random number, then 
     print it 
     </description> 
     <target name="random"> 
     <script language="javascript"><![CDATA[ 
      //NB: an unqualified Math is the JavaScript object 
      var r=java.lang.Math.random(); 
      var num = Math.round(r*10); 
      project.setNewProperty("random", num); 
      self.log("Generated random number " + num, project.MSG_DEBUG); 
     ]]> 
     </script> 
     </target> 
     <target name="test-random" depends="random"> 
     <echo>Random number is ${random}</echo> 
     </target> 
    </project> 
3

Non è stato definito un obiettivo per chiamare:

<foreach param="instance" list="a,b,c,d,e" target="processListItem" /> 

alternativa:

<for param="instance" list="a,b,c,d,e" > 
    <sequential> 
    <!-- Do Something with @{instance} --> 
    </sequential> 
</for> 
Problemi correlati