maven-surefire-plugin incluye / excluye precedencia
Cuando se utiliza el complemento maven-surefire y ambos incluyen y excluyen, ¿en qué orden se procesan? Además, si tiene 3 conjuntos de pruebas, el primero es el conjunto base, el segundo y el tercero son casos especiales, ¿puede usar los perfiles para incluir / excluir más? ¿Cómo se fusionarán los ajustes de inclusión / exclusión del perfil? Por ejemplo, me gustaría hacer algo como esto:
<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 correr así:
mvn package -P connectedToProdNetwork
o
mvn package -P runForAsLongAsYouNeed
o
mvn package -P connectedToProdNetwork,runForAsLongAsYouNeed
---- ACTUALIZACIÓN -----
Utilizandomvn help:effective-pom -P [profileA]
Pude determinar que si especifico un solo perfil, el pom efectivo 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 aporte 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 añado el atributo.combine.children="append"
al<includes>
elemento de las configuraciones de perfil, y suministrar 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 como un<include>
y un<exclude>
, ¿lo que pasa?
---- ACTUALIZACIÓN 2 ----
Realmente ejecutando una compilación con esta configuración:
<configuration>
<includes>
<include>**/TestA.java</include>
</includes>
<excludes>
<exclude>**/TestA.java</exclude>
</excludes>
</configuration>
HaceNO ejecuta TestA, por lo que aparece una<exclude>
superará una<include>
. Tenga en cuenta que por motivos de integridad, hice el orden inverso y puse<excludes>
antes de<includes>
Pero el comportamiento no cambió. Si alguien puede encontrar un lugar que no sea el código fuente donde se describe este comportamiento, con gusto le daré la respuesta ...