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=true
compilation 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.
-Dmaven.test.skip=true -DskipTests
? L'un ou l'autre peut parfois être omis, selon les circonstances, mais qui veut y penser ..Réponses:
Comme vous l'avez noté,
-Dmaven.test.skip=true
ignore 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-jar
module précédemment construit:Si
-Dmaven.test.skip=true
(ou simplement-Dmaven.test.skip
) est spécifié, lestest-jar
s 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.la source
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:
la source
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
la source
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
A
etB
, où celaB
dépendA
), vous pouvez également ajouter une dépendance de test àA
partir deB
.Cette dépendance peut se présenter comme suit:
(pour plus d'informations, reportez-vous à https://maven.apache.org/guides/mini/guide-attached-tests.html )
Notez que le projet
A
produit un artefact secondaire avec un classificateurtests
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 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'tests
artefact a été produit.Cependant, si vous exécutez votre build avec
-DskipTests
votretests
artefact sera produit (bien que les tests ne s'exécutent pas) et la dépendance sera résolue.la source
Pour ignorer le scénario de test pendant l'installation propre de maven, j'ai utilisé le paramètre -DskipTests dans la commande suivante
dans la fenêtre du terminal
la source
Le paramètre -DskipTests peut ne pas fonctionner selon la version de votre plugin surefire.
Source: Détails des paramètres Surefire
la source
Pendant la compilation de maven, vous pouvez ignorer l'exécution du test en ajoutant le plugin suivant dans pom.xml
la source
mvn test