J'utilise Maven 2.2.1 et pour construire mon projet, j'ai utilisé cette commande
mvn clean install -Dmaven.test.skip=true
Cependant, la construction a échoué en disant qu'il ne pouvait pas trouver l'un des artefacts. Cependant, quand j'ai utilisé:
mvn clean install -DskipTests
tout a bien fonctionné.
Jusqu'à présent, je pensais que ces 2 commandes sont équivalentes. Cependant, ce lien semble suggérer que -Dmaven.test.skip=true
ignore également la compilation des cas de test.
Cependant, cela ne m'a toujours pas expliqué pourquoi une commande fonctionnait et une autre ne fonctionnait pas. Sera reconnaissant si quelqu'un s'il vous plaît expliquez-moi cela.
Comme vous l'avez noté, -Dmaven.test.skip=true
ignore la compilation des tests. Plus précisément, il passe à la construction des artefacts de test. Une pratique courante pour les grands projets consiste à partager les utilitaires de test et les classes de base entre les modules d'un même projet.
Pour ce faire, un module requiert le test-jar
d'un module précédemment construit:
<dependency>
<groupId>org.myproject.mygroup</groupId>
<artifactId>common</artifactId>
<version>1.0</version>
<type>test-jar</type>
<scope>test</scope>
</dependency>
Si -Dmaven.test.skip=true
(ou simplement -Dmaven.test.skip
) est spécifié, le test-jar
s n'est pas construit et tout module qui en dépend échouera à sa construction.
En revanche, lorsque vous utilisez -DskipTests
, Maven ne ne lance pas les tests, mais les compile et construit le test-jar, le rendant disponible pour les modules suivants.
J'ai eu une certaine interdépendance avec les tests afin de construire le paquet.
La commande suivante parvient à ignorer la nécessité de l’artefact de test pour atteindre l’objectif:
mvn -DskipTests=true package
Je peux vous donner un exemple qui aboutit au même problème, mais cela ne vous donnera peut-être pas de réponse à votre question. (En outre, dans cet exemple, j'utilise mes connaissances sur Maven 3, qui peuvent ne pas s'appliquer à Maven 2.)
Dans un projet Maven multi-module (contient les modules A
et B
, où B
dépend de A
), vous pouvez également ajouter une dépendance test sur A
à partir de B
.
Cette dépendance peut ressembler à ceci:
<dependency>
<groupId>com.foo</groupId>
<artifactId>A</artifactId>
<type>test-jar</type> <!-- I'm not sure if there is such a thing in Maven 2, but there is definitely a way to achieve such dependency in Maven 2. -->
<scope>test</scope>
</dependency>
(pour plus d'informations, consultez https://maven.Apache.org/guides/mini/guide-attached-tests.html )
Notez que le projet A
génère un artefact secondaire avec un classificateur tests
où se trouvent les classes de test et les ressources de test.
Si vous construisez votre projet avec -Dmaven.test.skip=true
, vous obtiendrez une erreur de résolution de dépendance tant que l'artefact test n'a pas été trouvé dans votre référentiel local ou dans vos référentiels externes. La raison en est que les classes de test n'ont été ni compilées ni que l'artefact tests
a été produit.
Cependant, si vous exécutez votre construction avec -DskipTests
, votre artefact tests
sera produit (bien que les tests ne s'exécutent pas) et la dépendance sera résolue.
Il y a une différence entre chaque paramètre.
Les tests -DskipTests ignorent la phase d'exécution des tests, cela signifie qu'à la fin de ce processus, vos tests seront compilés.
-Dmaven.test.skip = true ignore la phase de compilation et d'exécution des tests.
En tant que paramètre -Dmaven.test.skip = true, ignorez la compilation, vous n'avez pas l'artefact de test.
Pour plus d'informations, veuillez lire la documentation de surfire: http://maven.Apache.org/plugins-archives/maven-surefire-plugin-2.12.4/examples/skipping-test.html
Pour ignorer le scénario de test lors de la nouvelle installation de Maven, j’ai utilisé le paramètre -DskipTests dans la commande suivante.
mvn clean install -DskipTests
dans la fenêtre du terminal
Pendant la compilation de Maven, vous pouvez ignorer l'exécution du test en ajoutant le plugin suivant dans pom.xml
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.20.1</version>
<configuration>
<skipTests>true</skipTests>
</configuration>
</plugin>
Le paramètre -DskipTests peut ne pas fonctionner selon la version de votre plugin surefire.
Vous pouvez utiliser "-Dmaven.test.skip.exec" au lieu de "-DskipTests"
Source: Détails du paramètre Surefire