Maven skip tests

226

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'elle ne pouvait pas trouver l'un des artefacts. Cependant, quand j'ai utilisé:

mvn clean install -DskipTests

tout fonctionnait bien.

Jusqu'à présent, je pensais que ces 2 commandes sont équivalentes. Cependant, ce lien semble suggérer que la -Dmaven.test.skip=truecompilation des cas de test est également ignorée.

Cependant, cela ne m'a toujours pas expliqué pourquoi une commande fonctionne et une autre ne fonctionne pas. Sera reconnaissant si quelqu'un me l'explique.

Prabhjot
la source
1
Quelle version de maven-surefire-plugin utilisez-vous? Est-ce la même que la version doc que vous lisez?
gerrytan
2
L'un saute la construction, l'autre saute. Si vous voulez les deux, utilisez les deux.
Elliott Frisch,
1
Pouvez-vous fournir des détails sur l'échec - le message d'erreur ou la trace de pile?
Raghuram
1
Pourquoi utilisez-vous une telle ancienne version de Maven qui est déjà définie EoL .
khmarbaise
1
Alors, est-il vraiment vrai que pour sauter complètement tout ce qui concerne le test, je dois utiliser -Dmaven.test.skip=true -DskipTests? L'un ou l'autre peut parfois être omis, selon les circonstances, mais qui veut y penser ..
Landon Kuhn

Réponses:

121

Comme vous l'avez noté, -Dmaven.test.skip=trueignore la compilation des tests. Plus précisément, il saute 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 nécessite un test-jarmodule 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é, les test-jars ne sont pas construits, et tout module qui s'appuie sur eux échouera sa construction.

En revanche, lorsque vous utilisez -DskipTests, Maven ne pas exécuter les tests, mais il ne les compiler et construire le pot d'essai, le rendant disponible pour les modules suivants.

Mureinik
la source
2
Comment résoudre ce problème? Comme ma commande maven en ligne, utilisez -Dmaven.test.skip.
neptune
2
@neptune quel problème? Si vous avez une nouvelle question, veuillez utiliser un nouveau message pour la poser.
Mureinik
58

J'ai eu une certaine interdépendance avec les tests afin de construire le package.

La commande suivante parvient à contourner la nécessité de l'artefact de test pour atteindre l'objectif:

mvn -DskipTests=true  package
gilwo
la source
29

Il y a une différence entre chaque paramètre.

  • La phase -DskipTests ignore l'exécution des tests, cela signifie qu'à la fin de ce processus, vous aurez compilé vos tests.

  • La phase -Dmaven.test.skip = true ignore la compilation et l'exécution des tests.

Comme le paramètre -Dmaven.test.skip = true skip compilation, vous n'avez pas l'artefact de test.

Pour plus d'informations, lisez simplement la documentation de surfire: http://maven.apache.org/plugins-archives/maven-surefire-plugin-2.12.4/examples/skipping-test.html

Dennys Fredericci
la source
15

Je peux vous donner un exemple qui résulte du même problème, mais il ne vous donnera peut-être pas de réponse à votre question. (De plus, dans cet exemple, j'utilise mes connaissances Maven 3, qui peuvent ne pas s'appliquer à Maven 2.)

Dans un projet maven multi-module (contient des modules Aet B, où cela Bdépend A), vous pouvez également ajouter une dépendance de test à Apartir deB .

Cette dépendance peut se présenter comme suit:

<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, reportez-vous à https://maven.apache.org/guides/mini/guide-attached-tests.html )
Notez que le projet Aproduit un artefact secondaire avec un classificateur testsoù 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 de test n'a pas été trouvé dans votre référentiel local ou des référentiels externes. La raison en est que les classes de tests n'ont pas été compilées ni que l' testsartefact a été produit.
Cependant, si vous exécutez votre build avec -DskipTestsvotre testsartefact sera produit (bien que les tests ne s'exécutent pas) et la dépendance sera résolue.

Stepan Vavra
la source
10

Pour ignorer le scénario de test pendant l'installation propre de maven, j'ai utilisé le paramètre -DskipTests dans la commande suivante

mvn clean install -DskipTests

dans la fenêtre du terminal

Niraj Trivedi
la source
9

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 des paramètres Surefire

vtsamis
la source
1

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>
Radadiya Nikunj
la source
1
Il saute les tests même lorsque vous le faitesmvn test
Pratik Singhal