当使用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