Si vous avez un grand projet multi-module et que vous souhaitez sauter des tests uniquement dans certains modules sans avoir à modifier chacun des modules pom.xml
avec une configuration et un profilage personnalisés, vous pourriez ajouter ce qui suit au fichier parent pom.xml
fichier :
<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>
Grâce à la build-helper-maven-plugin
vous vérifiez dynamiquement si vous vous trouvez dans un certain module ou non pendant la construction, par le biais de la commande project.artifactId
(pointant sur chaque artifactId
pendant la construction), l'expression rationnelle chercherait alors à trouver une correspondance pour certaines valeurs (les noms de modules pour lesquels vous voulez ignorer les tests) et remplirait le module maven.test.skip
en conséquence (en lui donnant la valeur true
).
Dans ce cas, les tests seront ignorés pour les éléments suivants module1
et module3
tout en fonctionnant correctement pour module2
c'est-à-dire, comme exprimé par la regex.
L'avantage de cette approche est qu'elle est dynamique et centralisée (dans l'entreprise mère). pom.xml
) donc meilleur pour la maintenance : vous pouvez ajouter ou supprimer des modules à tout moment en modifiant simplement la simple expression rationnelle ci-dessus.
Évidemment, si ce n'est pas le comportement par défaut de la compilation (cas recommandé), vous pouvez toujours envelopper l'extrait ci-dessus dans une balise profil maven .
Vous pouvez également aller plus loin et avoir un comportement dynamique basé sur vos données :
<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>
Ici, nous remplaçons en fait la valeur regex par une propriété, test.regex
La valeur par défaut est de none
(ou tout ce qui ne correspondrait à aucun nom de module ou, également, les correspondances par défaut de saut requises).
Puis, à partir de la ligne de commande, nous pourrions avoir
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)
C'est-à-dire qu'au moment de l'exécution, vous décidez, sans qu'il soit nécessaire de modifier l'architecture de l'entreprise, de mettre en place un système de gestion de la qualité. pom.xml
ou l'activation d'un profil.