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