wtyczka maven-surefire zawiera / wyklucza pierwszeństwo
Podczas korzystania z wtyczki maven-surefire, która zawiera i wyklucza, w jakiej kolejności są przetwarzane? Ponadto, jeśli masz 3 zestawy testów, z których pierwszy to zestaw podstawowy, drugi i trzeci to przypadki szczególne, czy możesz użyć profili do dalszego włączania / wyłączania? W jaki sposób zostaną połączone ustawienia włączania / wyłączania profilu? Na przykład chciałbym zrobić coś takiego:
<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>
A potem będziesz mógł uruchomić w ten sposób:
mvn package -P connectedToProdNetwork
lub
mvn package -P runForAsLongAsYouNeed
lub
mvn package -P connectedToProdNetwork,runForAsLongAsYouNeed
---- AKTUALIZACJA -----
Za pomocąmvn help:effective-pom -P [profileA]
Udało mi się ustalić, że jeśli określę pojedynczy profil, wynikowy skuteczny pom będzie:
<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>
A jeśli dostarczę więcej niż jeden profil,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>
I wreszcie, jeśli dodam atrybutcombine.children="append"
do<includes>
element konfiguracji profilu i dostarczają oba 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>
Jednak teraz, gdy każdy plik jest określony jako oba<include>
i an<exclude>
, co się dzieje?
---- AKTUALIZACJA 2 ----
Właściwie uruchamianie kompilacji z tą konfiguracją:
<configuration>
<includes>
<include>**/TestA.java</include>
</includes>
<excludes>
<exclude>**/TestA.java</exclude>
</excludes>
</configuration>
RobiNIE uruchom TestA, więc wydaje się<exclude>
obezwładni<include>
. Zauważ, że ze względu na kompletność odwróciłem porządek i umieściłem<excludes>
przed<includes>
ale zachowanie się nie zmieniło. Gdyby ktokolwiek mógł znaleźć jakiś fragment kodu źródłowego, w którym opisane jest to zachowanie, chętnie udzieliłbym im odpowiedzi ...