У меня есть мультимодульный проект maven с интеграционными и модульными тестами в той же папке (src/test/java). Тесты интеграции отмечены знаком @Category(IntegrationTest.class)
. Я хочу завершить следующую настройку:
- Если я запустил
mvn install
, я хочу, чтобы все тесты компилировались, но я не хочу их выполнять. - Если я запустил
mvn test
, я хочу, чтобы все тесты компилировались, но выполнялись только модульные тесты. - Если я запустил
mvn integration-test
, я хочу скомпилировать и выполнить все тесты.
Важным моментом является то, что я хочу, чтобы это было настроено в pom.xml
без каких-либо дополнительных аргументов командной строки.
В настоящее время я придумал следующую настройку в родительском pom.xml, где единственная проблема - №1, где выполняются все тесты:
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>${project.java.version}</source>
<target>${project.java.version}</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.14.1</version>
<dependencies>
<dependency>
<groupId>org.apache.maven.surefire</groupId>
<artifactId>surefire-junit47</artifactId>
<version>2.14.1</version>
</dependency>
</dependencies>
<configuration>
<includes>
<include>**/*.class</include>
</includes>
<excludedGroups>cz.cuni.xrg.intlib.commons.IntegrationTest</excludedGroups>
</configuration>
</plugin>
<plugin>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.14.1</version>
<dependencies>
<dependency>
<groupId>org.apache.maven.surefire</groupId>
<artifactId>surefire-junit47</artifactId>
<version>2.14.1</version>
</dependency>
</dependencies>
<configuration>
<groups>cz.cuni.xrg.intlib.commons.IntegrationTest</groups>
</configuration>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
<configuration>
<includes>
<include>**/*.class</include>
</includes>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
</build>
Все дочерние модули имеют следующую конфигурацию плагина в своем pom.xml, который, как я полагаю, должен наследовать от родительского pom:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
</plugin>
<plugin>
<artifactId>maven-failsafe-plugin</artifactId>
</plugin>
</plugins>
</build>
Я попытался использовать <skipTests>true</skipTests>
, но он отключает выполнение теста для всех целей, что не то, что я хочу (нарушает # 2 и # 3). Также довольно странно, что mvn test
отличит параметр skipTests=true
... почему я хочу запустить его в первую очередь?
После нескольких часов работы с поиском и попытками разных комбинаций я не решаюсь, можно ли даже не запускать тесты в mvn install
, а в то же время запускать их в mvn test
. Надеюсь, кто-то докажет это неправильно.;)
Я также согласен принять решение, где mvn install
будет выполнять только модульные тесты, но я не думаю, что это имеет большое значение.