[英]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.