maven-surefire-plugin hat Vorrang

In welcher Reihenfolge werden die maven-surefire-Plugins und die Includes und Exclusives verarbeitet? Wenn Sie über 3 Testsätze verfügen, wobei der erste der Basissatz und der zweite und der dritte Sonderfall sind, können Sie Profile zum weiteren Einschließen / Ausschließen verwenden? Wie werden die Profil-Einschluss- / Ausschluss-Einstellungen zusammengeführt? Zum Beispiel möchte ich so etwas machen:

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

Und dann kann es so laufen:

mvn package -P connectedToProdNetwork

oder

mvn package -P runForAsLongAsYouNeed

oder

mvn package -P connectedToProdNetwork,runForAsLongAsYouNeed

---- UPDATE -----

Verwendenmvn help:effective-pom -P [profileA] Ich konnte feststellen, dass, wenn ich ein einzelnes Profil spezifiziere, das resultierende effektive pom sein wird:

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

Und wenn ich mehr als ein Profil zur Verfügung stelle,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>

Und zum Schluss, wenn ich das Attribut hinzufügecombine.children="append" zum<includes> Element der Profilkonfigurationen und liefern beide Profile,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>

Jetzt wird jede Datei jedoch als beides angegeben<include> und ein<exclude>, was geschieht?

---- UPDATE 2 ----

Derzeit wird ein Build mit dieser Konfiguration ausgeführt:

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

TutNICHT Führen Sie TestA aus<exclude> überwältigen<include>. Beachten Sie, dass ich der Vollständigkeit halber die Reihenfolge umgekehrt und gesetzt habe<excludes> Vor<includes> aber das Verhalten änderte sich nicht. Wenn jemand etwas finden kann, das nicht dem Quellcode entspricht, in dem dieses Verhalten beschrieben ist, gebe ich ihm gerne die Antwort ...

Antworten auf die Frage(2)

Ihre Antwort auf die Frage