Как я могу заставить Maven / Surefire запускать тесты только в модулях, указанных аргументом -pl - PullRequest
0 голосов
/ 28 апреля 2020

У меня есть многомодульные проекты Maven. И я часто запускаю maven для одного модуля (pl) и его зависимостей (-am):

mvn test -pl module -am

Это также запустит тесты для всех зависимостей. Есть ли способ сказать Surefire только запускать тесты в модуле / с (один / s, указанный аргументом -pl, module в приведенном выше примере) и пропустить все тесты во всех модулях, собранных с помощью опция -am.

Примечания:

  • Я не могу использовать белый список тестов, используя -Dtest=..., поскольку пакет гарантирует, что никакие тесты из другого модуля не будут выполнены.
  • Если я не использую опцию -am, сборка не удастся из-за зависимостей из того же проекта, которые не будут найдены (а поскольку я нахожусь в среде Dockerized, у меня нет такой роскоши из кэшированных артефактов в .m2/repository)

1 Ответ

0 голосов
/ 02 мая 2020

Я применил следующий sed обходной путь в моих скриптах для решения этой проблемы. По сути, я добавляю конфигурацию <skipTests>true</skipTests> для maven-surefire-plugin во все модули моего проекта, за исключением (следовательно, команды git checkout) моего текущего модуля (обозначается ниже переменной MAVEN_MODULE):

echo "==> Forcibly disabling of tests in all dependency modules"
for pom in */pom.xml
do
  sed -i '/<plugins>/a <plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><configuration><skipTests>true</skipTests></configuration></plugin>' $pom
done
git checkout "${MAVEN_MODULE}"

, где команда sed добавляет следующий фрагмент XML в раздел <plugins> каждого дочернего модуля pom.xml файл:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <configuration>
        <skipTests>true</skipTests>
    </configuration>
</plugin>
...