簡體   English   中英

maven-surefire-plugin包含/排除優先級

[英]maven-surefire-plugin include/exclude precedence

當使用maven-surefire-plugin並且包含和排除時,它們處理的順序是什么? 此外,如果您有3組測試,第一組是基本集,第二組和第三組是特殊情況,您是否可以使用配置文件進一步包含/排除? 如何合並配置文件包含/排除設置? 例如,我想做這樣的事情:

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

然后能夠像這樣運行:

mvn package -P connectedToProdNetwork

要么

mvn package -P runForAsLongAsYouNeed

要么

mvn package -P connectedToProdNetwork,runForAsLongAsYouNeed

----更新-----

使用mvn help:effective-pom -P [profileA]我能夠確定如果我指定一個配置文件,那么產生的有效pom將是:

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

如果我提供多個配置文件, 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>

最后,如果我將屬性combine.children="append"到配置文件配置的<includes>元素,並提供兩個配置文件, 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>

但是,現在每個文件都被指定為<include><exclude> ,會發生什么?

----更新2 ----

實際上使用此配置運行構建:

<configuration>
  <includes>
    <include>**/TestA.java</include>
  </includes>
  <excludes>
    <exclude>**/TestA.java</exclude>
  </excludes>
</configuration>

運行TestA,因此看起來<exclude>會壓倒<include> 請注意,為了完整起見,我確實顛倒了順序並在<includes>之前放置<excludes> ,但行為沒有改變。 如果有人能找到這個行為概述的源代碼之外的地方,我很樂意給他們答案......

我找不到關於surefire插件的官方文檔,但實際上,exclude-override-include是一種常見方法,並且Maven也在其他類似的上下文中應用,例如資源。

唯一官方相關信息(我發現)來自官方Maven POM參考文檔, 在這里

includes :一組文件模式,使用*作為通配符,指定要包含在該指定目錄下的資源的文件。

排除 :與includes相同的結構,但指定要忽略的文件。 在包含和排除之間的沖突中,排除勝利

注意:我在有趣的聲明中添加了最終的粗體格式。

因此,可能在官方maven插件中使用相同的方法(通常,所有插件都具有org.apache.maven.plugins groupId和maven-前綴作為artifactId)。

您是否嘗試過使用JUnit類別?

http://www.agile-engineering.net/2012/04/unit-and-integration-tests-with-maven.html

使用該方法,您可以為測試提供許多不同的類別,並使用它來排除/包含它們,而不是類名。 這將是一種更具擴展性的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM