maven-surefire-plugin を使用し、包含と除外の両方を使用する場合、それらはどの順序で処理されますか? さらに、3 セットのテストがある場合、最初のセットは基本セット、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>
たが、動作は変わりませんでした。 この動作が概説されているソースコードのどこかで誰かが見つけることができれば、喜んで答えてくれるでしょう...