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

questionAnswers(2)

yourAnswerToTheQuestion