當使用maven-surefire-plugin並且包含和排除時,它們處理的是哪些訂單?此外,如果您有三組測試,第一組爲基礎組,第二組和第三組爲特殊情況,您是否可以使用配置文件進一步包含/排除?如何將配置文件包含/排除設置合併?例如,我願做這樣的事情:maven-surefire-plugin包含/排除優先
<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
---- UPDATE -----
使用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>
是否不運行種皮,因此纔出現了<exclude>
會壓倒<include>
。 請注意,爲了完整起見,我確實顛倒了訂單並在<includes>
之前放置了<excludes>
,但行爲並未發生變化。如果任何人可以找到的地方短的源代碼行爲概述,我會很樂意給他們的答案...
排除覆蓋包括因爲通常人們包括比他們需要的更大的集合,只需要一些取出。這通常使得列表更短,工作更少。 – Steven 2012-08-14 23:28:28
@Steven,是的,它符合我在測試過程中的經歷。你知道在哪裏這是_officially_陳述,以便我知道他們不會在未來改變這種行爲?無論如何,謝謝你。 – Lucas 2012-08-16 16:57:19
我認爲實驗方法往往是最好的確定:) - 仍然:pom參考給出了關於順序的一些提示:http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle .html - 例如。繼承執行首先運行。插件使用排除/包含按照pom的順序通常很常見。所以你可以包括一些特殊的東西,但不包括全部或包含所有東西,並排除特殊的東西有疑問的命令將遵循(在大多數情況下,插件) – wemu 2015-02-03 12:40:11