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 ...

questionAnswers(2)

yourAnswerToTheQuestion