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

Respuestas a la pregunta(2)

Su respuesta a la pregunta