2009-08-14 14 views
9

Quiero ejecutar el plugin de compilación maven en una fase diferente y con diferentesDirectorios de origen yDirectorios de tal manera que el código de directorios que no sean src/main/java y src/test/java usado.Directorio de origen de ejecución personalizada del compilador Maven2 y directorio de destino

Pensé que la solución se vería como la siguiente, donde la fase I la estaba enlazando con la prueba previa a la integración. Sin embargo, las propiedades de testSourceDirectory y testOutputDirectory no parecen estar especificadas de esta forma, ya que están en la sección del POM.

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-compiler-plugin</artifactId> 

    <executions> 
    <execution> 
     <id>compile mytests</id> 
     <goals> 
     <goal>testCompile</goal> 
     </goals> 
     <phase>pre-integration-test</phase> 
     <configuration> 
     <testSourceDirectory>${basedir}/src/inttest/java</testSourceDirectory> 
     <testOutputDirectory>${basedir}/target/inttest-classes</testOutputDirectory> 
     </configuration> 
    </execution> 
    </executions> 
</plugin> 

¿Hay una manera de conseguir este plug-in para compilar diferentes directorios en diferentes fases sin afectar a su funcionamiento por defecto?

Respuesta

9

Los directorios de origen se establecen fuera del compilador-complemento dentro del elemento de compilación < >, por lo que esto no funcionará.

Puede utilizar la acumulación de add-sourceadd-test-source-helper-maven-plugin y para especificar los directorios de fuentes adicionales para sus pruebas de integración, pero esto no eliminar los directorios de origen existentes.

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>build-helper-maven-plugin</artifactId> 
    <version>1.3</version> 
    <executions> 
     <execution> 
     <id>add-it-source</id> 
     <phase>pre-integration-test</phase> 
     <goals> 
      <goal>add-source</goal> 
     </goals> 
     <configuration> 
      <sources> 
      <source>${basedir}/src/inttest/java</source> 
      </sources> 
     </configuration> 
     </execution> 
    </executions> 
    </plugin> 

Si enlaza el complemento prueba de código meta para funcionar justo antes de la testCompile objetivo, se incluirán las pruebas de integración. Tenga en cuenta que desea que se envíen a las clases de destino/prueba para que el complemento surefire las encuentre.

Para manejar la eliminación de las fuentes de prueba estándar, escribí un pequeño complemento para modificar el modelo para eliminar las ubicaciones de testSource existentes antes de agregar las de las pruebas de integración.

4

Después de más investigaciones, es evidente que esto no es posible en Maven 2 de la manera que quiero, es necesario un truco de alguna forma para introducir pruebas de integración. Si bien puede agregar directorios adicionales (como lo sugiere Rich Seller), no existe un complemento para eliminar las otras fuentes o compilar un directorio por separado de la compilación principal.

La mejor solución que he encontrado para agregar pruebas de integración es utilizar primero el complemento de compilación auxiliar para agregar el directorio directorio inttest que se compilará como pruebas.

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>build-helper-maven-plugin</artifactId> 
    <executions> 
     <execution> 
      <id>add-test-source</id> 
      <phase>generate-sources</phase> 
      <goals> 
       <goal>add-test-source</goal> 
      </goals> 
      <configuration> 
       <sources> 
        <source>src/inttest/java</source> 
       </sources> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 

Ahora con el fin de obtener las pruebas de integración que se ejecutan en la fase de pruebas de integración es necesario utilizar excluye e incluye manipular cuando consiguen ejecutan como a continuación. Esto permite cualquier parámetro personalizado que desee (en mi caso, un agente se agrega a través de argline).

<plugin> 
<groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-surefire-plugin</artifactId> 
    <configuration> 
    <excludes> 
     <exclude>**/itest/**</exclude> 
    </excludes> 
    </configuration> 
<executions> 
    <execution> 
     <id>inttests</id> 
     <goals> 
      <goal>test</goal> 
     </goals> 
     <phase>integration-test</phase> 
     <configuration> 
      <excludes><exclude>none</exclude></excludes> 
      <includes> 
       <include>**/itest/**/*Test.java</include> 
      </includes> 
     </configuration> 
    </execution> 
</executions> 
</plugin> 
+0

Por desgracia esto tampoco funciona correctamente. Parece que si usa esta cobertura: prueba de integración de cobertura, Maven ejecuta las pruebas unitarias con cobertura, luego las pruebas mismas y finalmente ejecuta las pruebas de integración, y por alguna razón ignora las exclusiones pero tiene en cuenta las inclusiones. –

Cuestiones relacionadas