Luc*_*cas 20 java pom.xml maven-3 maven maven-surefire-plugin
当使用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>
Run Code Online (Sandbox Code Playgroud)
然后能够像这样运行:
mvn package -P connectedToProdNetwork
Run Code Online (Sandbox Code Playgroud)
要么
mvn package -P runForAsLongAsYouNeed
Run Code Online (Sandbox Code Playgroud)
要么
mvn package -P connectedToProdNetwork,runForAsLongAsYouNeed
Run Code Online (Sandbox Code Playgroud)
----更新-----
使用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>
Run Code Online (Sandbox Code Playgroud)
如果我提供多个配置文件,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>
Run Code Online (Sandbox Code Playgroud)
最后,如果我将属性添加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>
Run Code Online (Sandbox Code Playgroud)
但是,现在每个文件都指定为an <include>和an <exclude>,会发生什么?
----更新2 ----
实际上使用此配置运行构建:
<configuration>
<includes>
<include>**/TestA.java</include>
</includes>
<excludes>
<exclude>**/TestA.java</exclude>
</excludes>
</configuration>
Run Code Online (Sandbox Code Playgroud)
难道不运行外种皮,因此它的出现<exclude>将压倒的<include>. 请注意,为了完整起见,我确实颠倒了顺序并放在<excludes>之前,<includes>但行为没有改变. 如果有人能找到这个行为概述的源代码之外的地方,我很乐意给他们答案......
A_D*_*teo 10
我找不到关于surefire插件的官方文档,但实际上,exclude-override-include是一种常见方法,并且Maven也在其他类似的上下文中应用,例如资源.
唯一官方相关信息(我发现)来自官方Maven POM参考文档,在这里:
includes:一组文件模式,使用*作为通配符,指定要包含在该指定目录下的资源的文件.
排除:与includes相同的结构,但指定要忽略的文件.在包含和排除之间的冲突中,排除胜利.
注意:我在有趣的声明中添加了最终的粗体格式.
因此,可能在官方maven插件中使用相同的方法(通常,所有插件都具有org.apache.maven.plugins groupId和maven-前缀作为artifactId).
| 归档时间: |
|
| 查看次数: |
10043 次 |
| 最近记录: |