Quiero ejecutar un comando desde un archivo de compilación Ant, para cada archivo en un directorio.
Busco una solución independiente de la plataforma.
¿Cómo hago esto?
Claro, podría escribir un script en algún lenguaje de script, pero esto agregaría más dependencias al proyecto.
file-io
ant
build-process
build-automation
ivan_ivanovich_ivanoff
fuente
fuente
Utilice la tarea <apply> .
Ejecuta un comando una vez para cada archivo. Especifique los archivos mediante catálogos de archivos o cualquier otro recurso. <apply> está integrado; no se necesita dependencia adicional; no se necesita implementación de tareas personalizadas.
También es posible ejecutar el comando solo una vez, agregando todos los archivos como argumentos de una sola vez. Utilice el atributo paralelo para cambiar el comportamiento.
Perdón por llegar tarde un año.
fuente
Tassilo Horn sugiere un enfoque sin ant-contrib (el objetivo original está aquí )
Básicamente, como no hay una extensión de <java> (¿todavía?) De la misma manera que <apply> extiende <exec> , sugiere usar <apply> (que, por supuesto, también puede ejecutar un programa java en una línea de comando)
Aquí algunos ejemplos:
fuente
Aquí hay una forma de hacer esto usando javascript y la tarea ant scriptdef, no necesita ant-contrib para que este código funcione ya que scriptdef es una tarea central de ant.
fuente
project
se hace referencia a una variable en el ejemplo anterior, pero sin una definición previa disponible. Sería bueno tener eso representado o aclarado. EDITAR: n / m, se encontró queproject
es una var predefinida para acceder al proyecto actual. Lo sospechaba, pero no estaba seguro.ant-contrib es maligno; escribir una tarea de hormiga personalizada.
ant-contrib es maligno porque intenta convertir ant de un estilo declarativo a un estilo imperativo. Pero xml es un lenguaje de programación basura.
Por el contrario, una tarea de hormiga personalizada le permite escribir en un lenguaje real (Java), con un IDE real, donde puede escribir pruebas unitarias para asegurarse de tener el comportamiento que desea, y luego hacer una declaración limpia en su script de compilación sobre el comportamiento que desea.
Esta perorata solo importa si le interesa escribir scripts de hormigas que se puedan mantener. Si no le importa la mantenibilidad, haga lo que sea que funcione. :)
Jtf
fuente
Sé que esta publicación es muy antigua, pero ahora que pasaron algunas versiones de ant, hay una manera de hacer esto con características básicas de ant y pensé que debería compartirla.
Se hace a través de una macrodef recursiva que llama a tareas anidadas (incluso se pueden llamar otras macros). La única convención es usar un nombre de variable fijo (elemento aquí).
Las características clave necesarias donde:
No logré hacer el delimitador variable, pero esto puede no ser un inconveniente importante.
fuente
Puede usar la tarea ant-contrib "for" para iterar en la lista de archivos separados por cualquier delimitador, el delimitador predeterminado es ",".
A continuación se muestra el archivo de muestra que muestra esto:
fuente
Haga lo que blak3r sugirió y defina su classpath de objetivos así
donde lib es donde almacena su jar
fuente