Ant: Come eseguire un comando per ogni file nella directory?

Voglio eseguire un comando da un file di build Ant, per ogni file in una directory.
Sto cercando una soluzione indipendente dalla piattaforma.

Come faccio a fare questo?

Certo, potrei scrivere uno script in qualche linguaggio di scripting, ma ciò aggiungerebbe ulteriori dipendenze al progetto.

Risposta breve

Utilizzare con un

Foreach richiede ant-contrib .

Esempio aggiornato per i recenti ant-contrib:

            

Ciò invocherà la “barra” di destinazione con $ {theFile} risultante nel file corrente.

Usa l’attività .

Esegue un comando una volta per ogni file. Specificare i file mediante set di file o qualsiasi altra risorsa. è integrato; non è necessaria alcuna dipendenza aggiuntiva; non è necessaria alcuna implementazione personalizzata delle attività.

È anche ansible eseguire il comando una sola volta, aggiungendo tutti i file come argomenti in una volta sola. Usa l’attributo parallelo per cambiare il comportamento.

Mi dispiace per essere in ritardo un anno.

Un approccio senza ant-contrib è suggerito da Tassilo Horn (l’ objective originale è qui )

Fondamentalmente, poiché non esiste un’estensione di (ancora?) Nello stesso modo in cui estende , suggerisce di usare (che può ovviamente anche eseguire un programma java in una riga di comando)

Ecco alcuni esempi:

          

Ecco come utilizzare javascript e l’attività ant scriptdef, non è necessario disporre di ant-contrib perché questo codice funzioni, dato che scriptdef è un’attività di base della formica.

          

ant-contrib è il male; scrivi un’attività personalizzata ant.

ant-contrib è malvagio perché cerca di convertire le formiche da uno stile dichiarativo in uno stile imperativo. Ma xml fa un linguaggio di programmazione schifoso.

Al contrario, un’attività personalizzata ant consente di scrivere in un linguaggio reale (Java), con un vero IDE, in cui è ansible scrivere test unitari per assicurarsi di avere il comportamento desiderato e quindi fare una dichiarazione pulita nel proprio script di costruzione il comportamento che vuoi

Questo sfogo è importante solo se ti preoccupi di scrivere script di formiche manutenibili. Se non ti interessa la mantenibilità, fai in modo che tutto funzioni. 🙂

jtf

So che questo post è davvero vecchio, ma ora che sono passate alcune versioni di antologie e di formiche c’è un modo per farlo con le funzionalità di base delle formiche e ho pensato di doverlo condividere.

Viene eseguito tramite un macrodef ricorsivo che chiama le attività nidificate (anche altre macro possono essere chiamate). L’unica convenzione è usare un nome di variabile fissa (elemento qui).

           @{list}            @{list}                          

Le caratteristiche chiave necessarie dove:

  • http://ant.apache.org/manual/ifunless.html introdotto in ant 1.9.1 (crediti per ant condizionale se all’interno di macrodef )
  • sottostringhe, molte grazie a Come estrarre una sottostringa in Ant
  • l’elemento macrodef in linea.

Non sono riuscito a rendere il delimitatore variabile, ma questo potrebbe non essere uno svantaggio importante.

È ansible utilizzare l’attività ant-contrib “per” per eseguire l’iterazione nell’elenco dei file separati da qualsiasi delimitatore, il delimitatore predefinito è “,”.

Di seguito è riportato il file di esempio che mostra questo:

      Updating file: @{file}      

Fai ciò che blak3r ha suggerito e definisci il tuo percorso di class come questo

        

dove lib è dove si memorizza il tuo barattolo