2008-08-12 31 views
26

Tengo un guión de compilación y como parte de ese guión, copia un archivo jar en un directorio, por lo que permite llamarlo jar utils. el jar de utils está creado por otro script de construcción que se encuentra en otro directorio. Lo que intento hacer es que mi script de compilación ejecute el script de compilación de utils para que pueda garantizar que el jar utils esté actualizado.Guiones de compilación Ant, antcall, dependencias, etc.

Así que sé que necesito importar el archivo de compilación utils.

<import file="../utils/build/build.xml" /> 

que no funciona debido a que la tarea de importación, a diferencia de casi todos los otros TAKS de hormigas, no se ejecuta desde basedir, que va desde la PWD. Así que para conseguir alrededor de eso tengo esta pequeña canción, que no importar con éxito el fichero de construcción

<property name="baseDirUpOne" location=".." /> 
    <import file="${baseDirUpOne}/utils/build/build.xml" /> 

Así que ahora que he resuelto mi problema de importación Tengo que llamar a la tarea, así que debería ser fácil derecha:

<antcall target="utils.package" /> 

nota de que en el anterior, Utiles es el nombre del proyecto de ../utils/build/build.xml

el problema ahora estoy corriendo en esa llamada es hormiga no se ejecuta en. ./utils/build así que lo que necesito, y no puedo encontrar, es una propiedad runat o algo similar, en esencia:

<antcall target="utils.package" runat="../utils/build" /> 

La razón por la que necesito esto es que en mi utils archivo construir el paso para seleccionar el código para copiar a la jarra se basa en las rutas relativas a fin de evitar hardcoding caminos en mi archivo de hormigas ¿Algunas ideas?

Respuesta

33

Tengo una configuración similar: tengo Ant build.xml principal que llama a un build.xml separado que se encarga de construir mis pruebas. Así es como lo hago:

<target name="build-tests"> 
    <subant target="build"> 
     <fileset dir="${test.home}" includes="build.xml"/> 
    </subant> 
</target> 

El truco es usar subant en lugar de antcall. No tiene que importar el otro archivo de compilación.

+0

¿Qué sucede si necesita ajustar la ruta de clases en el objetivo secundario? –

6

Intente utilizar el "ant" task en lugar de la tarea "anticast", que ejecuta directamente la compilación importada en lugar de importarla en el archivo de compilación actual. Tiene un parámetro "dir":

el directorio para utilizar como baseir para el nuevo proyecto Ant. El valor predeterminado es basado en el proyecto actual, a menos que inheritall se haya configurado como falso, en , en cuyo caso no tiene un valor predeterminado. Esto anulará la configuración basada en del proyecto llamado.

Por lo que podría hacer:

<ant antfile="${baseDirUpOne}/utils/build/build.xml" dir="../utils/build" /> 

o algo por el estilo.

+2

Haz que

0

Puede pasar los parámetros a antcall usando anidados en el bloque de llamada. Por lo tanto, puede pasar las propiedades de esa manera (probablemente incluso basadas en que las propiedades son inmutables).

Cuestiones relacionadas