2009-05-04 14 views
7

Tengo un proyecto con varios módulos, cada uno en su propio directorio. Cada módulo tiene su propio archivo de compilación ant (build.xml)Pase el objetivo ant a varios archivos build.xml en los subdirectorios

En el directorio raíz he configurado un archivo de compilación general que llama al archivo de compilación de cada módulo en el orden correcto.

<?xml version="1.0"?> 
<project name="bridgedb" default="all" basedir="."> 
    <target name="all"> 
    <ant dir="corelib"/> 
    <ant dir="tools"/> 
    <ant dir="makeGdb"/> 
    <ant dir="cytoscape-plugin"/> 
    </target> 
</project> 

Ahora cada módulo tiene también un objetivo "limpia", por lo que añadir estas líneas:

<target name="clean"> 
    <ant dir="corelib" target="clean"/> 
    <ant dir="tools" target="clean"/> 
    <ant dir="makeGdb" target="clean"/> 
    <ant dir="cytoscape-plugin" target="clean"/> 
    </target> 

Y hay más objetivos por el estilo. ¿Hay alguna forma de reescribir el archivo de compilación para evitar esta duplicación? He buscado una propiedad incorporada que contenga el objetivo activo, pero no pude encontrarlo.

Respuesta

7

Por qué no utilizar antcall para llamar a un destino que haga referencia a todos sus subdirectorios, y parametrizar el destino al que se llamará. p.ej.

<antcall target="doStuffToSubdirs"> 
    <!-- let's clean --> 
    <param name="param1" value="clean"/> 
    </antcall> 

y luego:

<target name="doStuffToSubdirs"> 
    <ant dir="corelib" target="${param1}"/> 
    <ant dir="tools" target="${param1}"/> 
    ...etc 
</target> 

por lo que este le permite parametrizar las llamadas a sus subdirectorios. Si agrega un nuevo subdirectorio, solo tiene que agregar ese subdirectorio al destino 'doStuffToSubdirs' (¡también le cambiaría el nombre!)

+0

Sí, esto funciona, gracias. – amarillion

+0

aunque debería ser amarillion

+0

Lo corregiré ahora. Thx para el cara a cara (confieso que no probé eso :-) –

2

Deja un objetivo limpio en su commonbuild.xml y en el niño sólo los archivos importar su padre build.xml

<import file="${parent.dir}/commonbuild.xml" /> 

Ahora usted será capaz de llamar a la meta limpio en su niño construye. También puede anular este objetivo creando un objetivo limpio en cualquiera de sus compilaciones secundarias.

+0

Si entiendo esto correctamente, eso supone que el objetivo "limpio" hace exactamente lo mismo cosa en cada subdirectorio. Pero ese no es el caso, especialmente no para otros objetivos que deseo llamar de la misma manera. – amarillion

+0

Tiene razón, interpreté mal su pregunta. –

+0

np, este es un truco útil también que puedo usar algún otro día :) – amarillion

Cuestiones relacionadas