maven-surefire-plugin包含/排除优先级

当使用maven-surefire-plugin并且包含和排除时,它们处理的顺序是什么? 此外,如果您有3组测试,第一组是基本集,第二组和第三组是特殊情况,您是否可以使用配置文件进一步包含/排除? 如何合并配置文件包含/排除设置? 例如,我想做这样的事情:

   org.apache.maven.plugins maven-surefire-plugin 2.12.2   /org/mycompany/dataset/test/ExtractProd*.java  /org/mycompany/dataset/test/LargeDataset*.java         connectedToProdNetwork    org.apache.maven.plugins maven-surefire-plugin   /org/mycompany/dataset/test/ExtractProd*.java        runForAsLongAsYouNeed    org.apache.maven.plugins maven-surefire-plugin   /org/mycompany/dataset/test/LargeDataset*.java        

然后能够像这样运行:

 mvn package -P connectedToProdNetwork 

要么

 mvn package -P runForAsLongAsYouNeed 

要么

 mvn package -P connectedToProdNetwork,runForAsLongAsYouNeed 

—-更新—–

使用mvn help:effective-pom -P [profileA]我能够确定如果我指定一个配置文件,那么产生的有效pom将是:

    [includeFromProfileA]   /org/mycompany/dataset/test/ExtractProd*.java  /org/mycompany/dataset/test/LargeDataset*.java    

如果我提供多个配置文件, mvn help:effective-pom -P [profileA],[profileB]

    [includeFromProfileAOrBSeeminglyArbitraryChoice]   /org/mycompany/dataset/test/ExtractProd*.java  /org/mycompany/dataset/test/LargeDataset*.java    

最后,如果我将属性combine.children="append"到配置文件配置的元素,并提供两个配置文件, mvn help:effective-pom -P [profileA],[profileB]

    [includeFromProfileA] [includeFromProfileB]   /org/mycompany/dataset/test/ExtractProd*.java  /org/mycompany/dataset/test/LargeDataset*.java    

但是,现在每个文件都指定为 ,会发生什么?

—-更新2 —-

实际上使用此配置运行构建:

   **/TestA.java   **/TestA.java   

运行TestA,因此看起来会压倒请注意,为了完整起见,我确实颠倒了顺序,并在之前放置 ,但行为没有改变。 如果有人能找到这个行为概述的源代码之外的地方,我很乐意给他们答案……

我找不到关于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

使用该方法,您可以为测试提供许多不同的类别,并使用它来排除/包含它们,而不是类名。 这将是一种更具扩展性的方法。