maven-surefire-plugin inclui / exclui precedência
Ao usar o plugin maven-surefire e ambos inclui e exclui, em qual ordem eles são processados? Além disso, se você tiver 3 conjuntos de testes, sendo o primeiro o conjunto de base, o segundo e o terceiro casos especiais, você pode usar perfis para incluir / excluir ainda mais? Como as configurações de inclusão / exclusão do perfil serão mescladas? Por exemplo, eu gostaria de fazer algo assim:
<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>
E então poder correr assim:
mvn package -P connectedToProdNetwork
ou
mvn package -P runForAsLongAsYouNeed
ou
mvn package -P connectedToProdNetwork,runForAsLongAsYouNeed
---- ATUALIZAÇÃO -----
Usandomvn help:effective-pom -P [profileA]
Eu era capaz de determinar que, se eu especificar um único perfil, o pom eficaz 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>
E se eu fornecer mais de um 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>
E por último, se eu adicionar o atributocombine.children="append"
ao<includes>
elemento das configurações de perfil e fornecer os dois perfis,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>
No entanto, agora que cada arquivo é especificado como um<include>
e um<exclude>
, o que acontece?
---- ATUALIZAR 2 ----
Realmente executando uma compilação com esta configuração:
<configuration>
<includes>
<include>**/TestA.java</include>
</includes>
<excludes>
<exclude>**/TestA.java</exclude>
</excludes>
</configuration>
FazNÃO executar TestA, por isso parece um<exclude>
vai dominar um<include>
. Note que por completo, eu inverti a ordem e coloquei<excludes>
antes<includes>
mas o comportamento não mudou. Se alguém puder encontrar algum lugar aquém do código-fonte onde este comportamento é descrito, eu ficaria feliz em dar-lhes a resposta ...