2011-09-12 14 views
22

tengo un proyecto que utiliza un archivo de hormigas padrescómo llamar a una tarea ant cuando anulando el objetivo en un archivo secundario

similar a esto:

<project name="some-portlet" basedir="." default="deploy"> 
    <import file="../build-common-portlet.xml" /> 
    <target name="test"> 
    <echo message="do foo"/> 
    RUN TEST FROM PARENT HERE 
    </target> 
    </project> 

ahora quiero anular la prueba de los padres objetivo de esta manera:

  • hacer algunas copias de tarros necesitaba
  • ejecutar el destino de la prueba desde el archivo principal

la primera parte no es un problema, pero no veo una manera de llamar a prueba desde el archivo principal

quiero el objetivo que se denomina prueba también, por lo que CI puede simplemente ejecutar el destino de la prueba.

¿hay alguna manera de llamar a prueba en ../build-common-portlet.xml?

Respuesta

24

La manera más simple es utilizar la dependencia en la prueba de los padres.

Para eso, es importante mantener el atributo de nombre <project> sincronizado con su nombre de archivo (OK, eso no es estrictamente necesario, pero mejora en gran medida la legibilidad y capacidad de mantenimiento de su script).

Así que en la acumulación común portlet.xml:

<project 
    name="build-common-portlet" <-- note the name 
    ... 
> 
    <target name="test"> 
    <echo message="Calling parent test target"/> 
    ... 
    </target> 
</project> 

De esa manera usted puede hacer:

<project name="some-portlet" basedir="." default="deploy"> 
    <import file="../build-common-portlet.xml" /> 
    <target name="test" 
    depends="build-common-portlet.test" <-- note parent specification 
    > 
    <echo message="do foo"/> 
    RUN TEST FROM PARENT HERE 
    </target> 
</project> 

>> En respuesta a comentar

Si desea para hacer un poco de trabajo antes de ejecutar la prueba de los padres, simplemente cree un nuevo objetivo y póngalo de dependencia antes de la prueba de los padres:

<project name="some-portlet" basedir="." default="deploy"> 
    <import file="../build-common-portlet.xml" /> 

    <target name="copy-jars"> 
    <echo message="copying jars"/> 
    </target> 

    <target name="test" 
    depends=" 
     copy-jars, 
     build-common-portlet.test 
    " 
    /> 
</project> 
+0

¿Esto no haría que la prueba de padres se ejecute primero? en mi caso, esto fracasaría porque la copia de los frascos no habría sucedido. también no quiero modificar el padre porque más que este proyecto incluye el archivo principal. (Tengo una solución, al menos así parece, en la siguiente respuesta) – nheid

+0

@nheid. He proporcionado una muestra que responde a tu comentario. –

+0

¡Me gusta más este enfoque que llamar al objetivo principal explícitamente! ¡Trabajó para mi! –

6

Encontré una solución que ejecutaba mis comandos y luego llamaba a prueba desde el archivo padre de la hormiga. Anula la prueba de los padres, luego llama cuando la prueba de los padres una vez que hayas hecho tu propia "magia".

También se pueden llamar a todos los destinos de otros padres.

Así que para alguien que no conozca su archivo ant, puede llamar a prueba de hormiga de la manera esperada.

<project name="some-portlet" basedir="." default="deploy"> 
     <import file="../build-common-portlet.xml" /> 
<target name="test"> 
     <echo message="do foo"/> 
     <ant antfile="../build-common-portlet.xml" target="test"/> 
</target> 
</project> 
+0

Bien, estaba buscando una solución cuando no tengo control sobre el archivo importado y cuando no tiene set. – alexandroid

Cuestiones relacionadas