【发布时间】:2012-08-11 03:39:44
【问题描述】:
当使用 maven-surefire-plugin 并同时包含和排除时,它们的处理顺序是什么?此外,如果您有 3 组测试,第 1 组是基本组,第 2 组和第 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>。 请注意,为了完整起见,我确实颠倒了顺序并将<excludes> 放在<includes> 之前,但行为没有改变。 如果有人能找到概述此行为的源代码之外的地方,我很乐意给他们答案...
【问题讨论】:
-
排除覆盖包括,因为通常人们包括比他们需要的更大的集合,只需要取出一些。这通常会缩短列表并减少工作量。
-
@Steven,是的,这符合我在测试期间的经历。您是否知道这是官方声明的任何地方,以便我知道他们将来不会改变这种行为?无论如何,谢谢伙计。
-
我认为实验方法通常是最好的方法 :) - 仍然:pom 参考给出了一些关于订单的提示:maven.apache.org/guides/introduction/… - 例如。继承的执行首先运行。插件按 pom 的顺序使用排除/包含通常很常见。因此,您可以在排除所有内容的同时包含一些特殊内容,也可以包含所有内容并排除一些特殊内容。有疑问会遵循 pom 中的顺序(在大多数情况下和插件)
标签: java maven maven-3 pom.xml maven-surefire-plugin