Podczas korzystania z wtyczki maven-surefire i obejmuje i wyklucza, w jakiej kolejności są przetwarzane? Ponadto, jeśli masz 3 zestawy testów, z których pierwszy to zestaw podstawowy, a drugi i trzeci to przypadki specjalne, czy możesz użyć profili do dalszego włączania/wyłączania? W jaki sposób zostaną scalone ustawienia włączania/wyłączania profilu? Na przykład, chciałbym zrobić coś takiego:maven-surefire-plugin włącza/wyklucza pierwszeństwo
<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 być w stanie uruchomić tak:
mvn package -P connectedToProdNetwork
lub
mvn package -P runForAsLongAsYouNeed
lub
mvn package -P connectedToProdNetwork,runForAsLongAsYouNeed
---- AKTUALIZACJA -----
Korzystanie mvn help:effective-pom -P [profileA]
udało mi się ustalić, że jeśli mogę określić pojedynczy profil, powstały skuteczne pom będą:
<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 gdybym dostarczyć 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 na koniec, jeśli dodaję atrybut combine.children="append"
do elementu <includes>
konfiguracji profilu i dostarczę 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>
Teraz jednak, że każdy plik jest określona zarówno jako <include>
i <exclude>
, co się dzieje?
---- UPDATE 2 ----
Faktycznie działa kompilacji z tej konfiguracji:
<configuration>
<includes>
<include>**/TestA.java</include>
</includes>
<excludes>
<exclude>**/TestA.java</exclude>
</excludes>
</configuration>
robi NIE prowadzony Testa, więc wydaje się <exclude>
będzie obezwładnić <include>
. Zauważ, że dla kompletności odwróciłem zamówienie i wstawiłem <excludes>
przed <includes>
, ale zachowanie się nie zmieniło. Jeśli ktoś może znaleźć gdzieś w pobliżu kodu źródłowego, gdzie to zachowanie jest opisane, chętnie odpowiem na nie ...
Wyklucza przesłonięcia, ponieważ zazwyczaj ludzie zawierają większy zestaw niż potrzebują i po prostu potrzebują trochę wykupionego. Zwykle oznacza to krótszą listę i mniej pracy. – Steven
@Steven, yeah, pasuje do tego, czego doświadczyłem podczas testów. Czy wiesz, gdziekolwiek jest to oficjalnie stwierdzone, aby wiedzieć, że nie zmienią tego zachowania w przyszłości? W każdym razie, dzięki człowieku. – Lucas
Myślę, że podejście eksperymentalne jest często najlepsze, aby być pewnym :) - nadal: referencja pom dostarcza wskazówek na temat zamówienia: http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle .html - np. odziedziczone egzekucje są uruchamiane jako pierwsze. Często zdarza się, że wtyczki używają wykluczeń/włączeń w kolejności pom. Możesz więc dodać coś specjalnego, wykluczając wszystko lub włączając wszystko i wykluczając coś wyjątkowego. W razie wątpliwości kolejność w pom będzie przestrzegana (w większości przypadków i wtyczek). – wemu