2012-08-14 22 views
15

Al utilizar el plugin maven-surefire, incluye y excluye, ¿en qué orden se procesan? Además, si tiene 3 conjuntos de pruebas, la primera es la base establecida, la segunda y la tercera son casos especiales, ¿puede usar perfiles para incluir/excluir? ¿Cómo se fusionarán las configuraciones de inclusión/exclusión de perfil? Por ejemplo, me gustaría hacer algo como esto:maven-surefire-plugin incluye/excluye precedencia

<build> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-surefire-plugin</artifactId> 
     <version>2.12.2</version> 
     <configuration> 
      <excludes> 
      <exclude>/org/mycompany/dataset/test/ExtractProd*.java</exclude> <!-- requires special network connectivity --> 
      <exclude>/org/mycompany/dataset/test/LargeDataset*.java</exclude> <!-- requires lengthy processing --> 
      </excludes> 
     </configuration> 
     </plugin> 
    </plugins> 
    </build> 

    <profiles> 
    <profile> 
     <id>connectedToProdNetwork</id> 
     <build> 
     <plugins> 
      <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-surefire-plugin</artifactId> 
      <configuration> 
       <includes> 
       <include>/org/mycompany/dataset/test/ExtractProd*.java</include> 
       </includes> 
      </configuration> 
      </plugin> 
     </plugins> 
     </build> 
    </profile> 
    <profile> 
     <id>runForAsLongAsYouNeed</id> 
     <build> 
     <plugins> 
      <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-surefire-plugin</artifactId> 
      <configuration> 
       <includes> 
       <include>/org/mycompany/dataset/test/LargeDataset*.java</include> 
       </includes> 
      </configuration> 
      </plugin> 
     </plugins> 
     </build> 
    </profile> 
    </profiles> 

y luego ser capaz de ejecutar la siguiente manera:

mvn package -P connectedToProdNetwork 

o

mvn package -P runForAsLongAsYouNeed 

o

mvn package -P connectedToProdNetwork,runForAsLongAsYouNeed 

---- ACTUALIZACIÓN -----

Usando mvn help:effective-pom -P [profileA] que fue capaz de determinar que si puedo especificar un único perfil, el pom efectiva resultante será:

 <configuration> 
      <includes> 
      <include>[includeFromProfileA]</include> 
      </includes> 
      <excludes> 
      <exclude>/org/mycompany/dataset/test/ExtractProd*.java</exclude> <!-- requires special network connectivity --> 
      <exclude>/org/mycompany/dataset/test/LargeDataset*.java</exclude> <!-- requires lengthy processing --> 
      </excludes> 
     </configuration> 

Y si el suministro de más de un perfil, mvn help:effective-pom -P [profileA],[profileB]:

 <configuration> 
      <includes> 
      <include>[includeFromProfileAOrBSeeminglyArbitraryChoice]</include> 
      </includes> 
      <excludes> 
      <exclude>/org/mycompany/dataset/test/ExtractProd*.java</exclude> <!-- requires special network connectivity --> 
      <exclude>/org/mycompany/dataset/test/LargeDataset*.java</exclude> <!-- requires lengthy processing --> 
      </excludes> 
     </configuration> 

Y, por último, si agrego el atributo combine.children="append" al elemento <includes> de las configuraciones de perfil, y proporciono ambos perfiles, mvn help:effective-pom -P [profileA],[profileB]:

 <configuration> 
      <includes combine.children="append"> 
      <include>[includeFromProfileA]</include> 
      <include>[includeFromProfileB]</include> 
      </includes> 
      <excludes> 
      <exclude>/org/mycompany/dataset/test/ExtractProd*.java</exclude> <!-- requires special network connectivity --> 
      <exclude>/org/mycompany/dataset/test/LargeDataset*.java</exclude> <!-- requires lengthy processing --> 
      </excludes> 
     </configuration> 

Sin embargo, ahora que cada archivo se especifica tanto como un <include> y un <exclude>, ¿qué ocurre?

---- ---- ACTUALIZACIÓN 2

corriendo realidad una acumulación con esta configuración:

<configuration> 
    <includes> 
    <include>**/TestA.java</include> 
    </includes> 
    <excludes> 
    <exclude>**/TestA.java</exclude> 
    </excludes> 
</configuration> 

¿El NO plazo Testa, por lo que aparece un <exclude> se dominar un <include>. Tenga en cuenta que, para completar, cambié el orden y coloque <excludes> antes de <includes> pero el comportamiento no cambió. Si alguien puede encontrar un código que no sea el código fuente donde se describe este comportamiento, con gusto le daré la respuesta ...

+3

Excluir anulaciones incluye porque, por lo general, las personas incluyen un conjunto más grande de lo que necesitan y solo necesitan algunas. Esto generalmente hace una lista más corta y menos trabajo. – Steven

+0

@Steven, sí, eso coincide con lo que experimenté durante las pruebas. ¿Sabes dónde está esto oficialmente? ¿Para que sepa que no cambiarán este comportamiento en el futuro? De todos modos, gracias hombre. – Lucas

+0

Creo que el enfoque experimental a menudo es el mejor para estar seguro :) - todavía: la referencia pom da alguna pista sobre el orden: http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle .html - por ej. las ejecuciones heredadas se ejecutan primero. A menudo es bastante común que los complementos usen las exclusiones/inclusiones en el orden del pom. De modo que puede incluir algo especial mientras excluye todo o incluye todo y excluye algo especial. En duda, se seguirá el orden en el pom (en la mayoría de los casos y complementos) – wemu

Respuesta

4

No pude encontrar la documentación oficial sobre el plugin surefire, pero de hecho el exclude-override-include es un enfoque común y también lo utiliza Maven en otros contextos similares, como por los recursos.

El único funcionario de una información relacionada (he encontrado) proviene de la documentación de referencia oficial Maven POM, here:

incluye: Un conjunto de patrones de archivos que especifican los archivos para incluir como recursos en virtud de ese directorio especificado, usando * como un comodín.

excluye: La misma estructura que incluye, pero especifica qué archivos ignorar. En conflictos entre incluir y excluir, excluir gana.

NOTA: Agregué el formato final en negrita en la declaración interesante.

Por lo tanto, es más probable que se use el mismo enfoque en los complementos maven oficiales (en general, todos los complementos que tienen org.apache.maven.plugins groupId y maven- prefix como artifactId).

+1

Gran descubrimiento ... no estoy seguro de que debería marcarlo como la respuesta, ya que no es técnicamente definitivo, pero definitivamente _userful_ información. – Lucas