Если у вас большой многомодульный проект, и вы хотите пропустить тесты только в определенных модулях без необходимости изменения каждого файла pom.xml
модуля с пользовательской конфигурацией и профилированием, вы можете добавить следующее в родительский файл pom.xml
файл:
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>1.12</version>
<executions>
<execution>
<id>regex-property</id>
<goals>
<goal>regex-property</goal>
</goals>
<configuration>
<name>maven.test.skip</name>
<value>${project.artifactId}</value>
<regex>(module1)|(module3)</regex>
<replacement>true</replacement>
<failIfNoMatch>false</failIfNoMatch>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
<modules>
<module>module1</module>
<module>module2</module>
<module>module3</module>
</modules>
Благодаря build-helper-maven-plugin
вы фактически будете динамически проверять, находитесь ли вы в определенном модуле или нет во время сборки, через свойство project.artifactId
(указывающее на каждый модуль artifactId
во время сборки), тогда регулярное выражение будет ищите соответствие для определенных значений (имена модулей, для которых вы хотите пропустить тесты) и соответственно заполняете свойство maven.test.skip
(устанавливая его в true
).
В этом случае тесты будут пропущены для module1
и module3
при правильной работе для module2
, то есть, как выражено в регулярном выражении.
Преимущество этого подхода состоит в том, что он динамический и централизованный (в родительском pom.xml
), следовательно, лучше для обслуживания: вы можете добавлять или удалять модули в любое время, просто изменив простое регулярное выражение выше.
Очевидно, что если это не стандартное поведение сборки (рекомендуется), вы всегда можете обернуть приведенный выше фрагмент в профиль maven .
Вы также можете пойти дальше и иметь динамическое поведение на основе вашего ввода:
<properties>
<test.regex>none</test.regex>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>1.12</version>
<executions>
<execution>
<id>regex-property</id>
<goals>
<goal>regex-property</goal>
</goals>
<configuration>
<name>maven.test.skip</name>
<value>${project.artifactId}</value>
<regex>${test.regex}</regex>
<replacement>true</replacement>
<failIfNoMatch>false</failIfNoMatch>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
Здесь мы фактически заменяем значение регулярного выражения свойством test.regex
со значением по умолчанию none
(или любым другим, которое не соответствует ни одному имени модуля, или, кроме того, требуются соответствия по умолчанию для пропуска).
Тогда из командной строки мы можем получить
mvn clean test -Dtest.regex="(module1)" > will skip tests only for module1
mvn clean test -Dtest.regex="(module1)|(module2)" > will skip tests on module1 and module2
mvn clean test -Dtest.regex="(module1)|(module2)|(module3)" > will skip the three module tests
mvn clean test -Dtest.regex=".+" > will skip all module tests
mvn clean test > would not skip anything (or fall back on default behavior)
То есть, тогда во время выполнения вы решаете, без необходимости изменять pom.xml
файл или активировать какой-либо профиль.