desde - build.xml java
¿Hay alguna manera de generalizar un objetivo Apache ANT? (5)
Consulte también la tarea de sustitución, que le permite llamar al mismo objetivo en varios archivos de compilación:
<project name="subant" default="subant1">
<property name="build.dir" value="subant.build"/>
<target name="subant1">
<subant target="">
<property name="build.dir" value="subant1.build"/>
<property name="not.overloaded" value="not.overloaded"/>
<fileset dir="." includes="*/build.xml"/>
</subant>
</target>
</project>
Tenemos una secuencia de comandos ANT de Apache para compilar nuestra aplicación, luego verificamos el archivo JAR resultante en el control de versión (VSS en este caso). Sin embargo, ahora tenemos un cambio que requiere que construyamos 2 archivos JAR para este proyecto, luego verifique ambos en VSS.
El objetivo actual que verifica el archivo JAR original en VSS descubre el nombre del archivo JAR a través de alguna propiedad. ¿Hay alguna manera fácil de "generalizar" este objetivo para poder reutilizarlo y verificar un archivo JAR con cualquier nombre? En un lenguaje normal, esto obviamente requeriría un parámetro de función pero, que yo sepa, realmente no hay un concepto equivalente en ANT.
En general, se considera una mala idea controlar la versión de tus binarios y no te recomiendo hacerlo. Pero si es absolutamente necesario, puede usar antcall combinado con param para pasar parámetros y llamar a un objetivo.
<antcall target="reusable">
<param name="some.variable" value="var1"/>
</antcall>
<target name="reusable">
<!-- Do something with ${some.variable} -->
</target>
Puede encontrar más información sobre la tarea anticolisión aquí .
Puedes usar Gant para escribir tu compilación con groovy para hacer lo que quieras o echarle un vistazo a la tarea de la hormiga groovy .
Sugeriría trabajar con macros sobre subant / antcall porque la principal ventaja que encontré con las macros es que tienes un control total sobre las propiedades que se pasan a la macro (especialmente si deseas agregar nuevas propiedades).
Simplemente refactoriza su script Ant comenzando con su objetivo:
<target name="vss.check">
<vssadd localpath="D:/build/build.00012.zip"
comment="Added by automatic build"/>
</target>
creando una macro (fíjate en copiar / pegar y reemplazar con el @ {archivo}):
<macrodef name="private-vssadd">
<attribute name="file"/>
<sequential>
<vssadd localpath="@{file}"
comment="Added by automatic build"/>
</sequential>
</macrodef>
e invoque las macros con sus archivos:
<target name="vss.check">
<private-vssadd file="D:/build/File1.zip"/>
<private-vssadd file="D:/build/File2.zip"/>
</target>
Refactorización, "el camino de la hormiga"