2008-12-17 10 views
13

build.xml tiene prueba y compilación objetivo. El objetivo prueba obviamente depende del objetivo build.¿Ant ofrece una forma de eludir la dependencia?

¿Cómo puedo ejecutar el objetivo de prueba solamente, temporalmente omitiendo la compilación, sin modificar el archivo build.xml?

Pregunto porque la compilación es demasiado larga y se mantiene actualizada por un servidor de integración continua; y estoy persiguiendo un problema con las pruebas unitarias.

Respuesta

19

No, no puede omitirlo sin modificar el archivo de compilación.

Esto es lo que hago en mis proyectos para resolver este problema. Para cada objetivo público crearé un objetivo privado con "do-" frente a él. El objetivo privado no tiene dependencia, y el objetivo público tiene el destino "do-" como una dependencia.

Por ejemplo:

<target name="compile" depends="init, do-compile" description="Compiles all of the source code" /> 

<target name="do-compile"> 
     <javac destdir="${classes.dir}" debug="true" encoding="ISO-8859-1"> 
      <src refid="src.path" /> 
      <include name="*.java" /> 
      <classpath refid="external.libraries.classpath" /> 
     </javac> 
</target> 
+1

Parece que trabajamos de manera similar, es bueno saber que no estoy solo en este frente :) –

4

Personalmente, he encontrado las cosas de dependencia en Ant para interferir en algo más que ayudar. Por lo general, configuro dos conjuntos de objetivos, unos que realmente hacen cosas (sin dependencias) y luego objetivos que solo tienen dependencias. De esta forma, puede ejecutar fácilmente un solo objetivo, y también puede ejecutar fácilmente todo el conjunto, etc. Esto encaja con los usos prácticos (más que ideológicos) en mi opinión.

+0

Buen truco, gracias. – philant

0

¿Simplemente "elimina" la dependencia temporalmente? `Si el código ya está construido, todos sus archivos deberían estar disponibles, ¿no? - Uy, solo vi que no puedes alterar el archivo, hmm, ¿por qué no ejecutas el mismo trabajo localmente primero?

2

Un objetivo de construcción bien escrito no necesitará reconstruir nada si el código no ha cambiado. Entonces, el hecho de que el objetivo de la prueba dependa de él debería ser en gran parte irrelevante. Si ejecuta el objetivo de compilación dos veces seguidas e intenta reconstruir algo la segunda vez, es posible que desee investigar por qué lo hace.

La forma simple de evitar ejecutar el objetivo es establecer el atributo "a menos" del objetivo con el nombre de alguna propiedad. Si luego establece esta propiedad en la línea de comando cuando ejecuta Ant, omitirá ese objetivo.

+0

de acuerdo, pero Ant solo se utiliza para iniciar la compilación basada en el archivo Makefile de una gran base de código. – philant

28

Utilice el atributo unless.

<target name="test" unless="dont.run.tests"> 

Si no desea que "prueba" para funcionar, simplemente

hormiga -Ddont.run.tests = true

Cabe definido si desea que las pruebas correr. Ant simplemente comprueba si está definido en absoluto. Además, hay un atributo if que hace lo contrario.

Aquí hay un article en ambos.

+1

Este es el enfoque correcto, se debe marcar como la respuesta correcta –

Cuestiones relacionadas