Quando si utilizza il plug-in maven-surefire ed entrambi include ed esclude, in quale ordine vengono elaborati? Inoltre, se hai 3 serie di test, il primo è il set base, il secondo e il terzo casi speciali, puoi usare i profili per includere/escludere ulteriormente? Come si unirà/escluderà le impostazioni del profilo? Ad esempio, mi piacerebbe fare qualcosa di simile:maven-surefire-plug-in include/exclude precedenza
<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 quindi essere in grado di eseguire in questo modo:
mvn package -P connectedToProdNetwork
o
mvn package -P runForAsLongAsYouNeed
o
mvn package -P connectedToProdNetwork,runForAsLongAsYouNeed
---- AGGIORNAMENTO -----
Utilizzando mvn help:effective-pom -P [profileA]
sono stato in grado di determinare che se a specificare un singolo profilo, il pom efficace risultante sarà:
<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 io fornisco più di un profilo, 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>
Infine, se aggiungo l'attributo combine.children="append"
all'elemento <includes>
delle configurazioni del profilo e fornisco entrambi i profili, 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>
Tuttavia, ora che ogni file è specificato sia come <include>
ed un <exclude>
, cosa succede?
---- ---- UPDATE 2
effettivamente in esecuzione una build con questa configurazione:
<configuration>
<includes>
<include>**/TestA.java</include>
</includes>
<excludes>
<exclude>**/TestA.java</exclude>
</excludes>
</configuration>
Does NON corsa Testa, in modo che appaia un <exclude>
volontà overpower a <include>
. Nota che per completezza, ho invertito l'ordine e ho inserito <excludes>
prima del <includes>
ma il comportamento non è cambiato. Se qualcuno può trovare qualche parte del codice sorgente in cui è descritto questo comportamento, sarei felice di dare loro la risposta ...
L'esclusione include le sostituzioni perché in genere le persone includono un set più grande del necessario e hanno solo bisogno di essere prese. Questo generalmente rende una lista più breve e meno lavoro. – Steven
@Steven, sì, corrisponde a quello che ho provato durante i test. Sai dovunque questo è dichiarato _ ufficialmente in modo che io sappia che non cambieranno questo comportamento in futuro? Comunque, grazie amico. – Lucas
Penso che l'approccio sperimentale sia spesso il migliore per essere sicuri :) - ancora: il riferimento del pom dà qualche suggerimento sull'ordine: http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle .html - per es. le esecuzioni ereditate vengono eseguite per prime Spesso è abbastanza comune che i plugin utilizzino gli escludi/inclusi nell'ordine del pom. Quindi puoi includere qualcosa di speciale escludendo tutto o includi tutti ed escludi qualcosa di speciale. Nel dubbio verrà seguito l'ordine nel pom (nella maggior parte dei casi e plugin) – wemu