Maven exécute "dependency:tree" au début de la phase "test"
Question
J'ai besoin d'obtenir le résultat de l'objectif "dependency:tree" de Maven au début de la phase "test", pour aider à déboguer un problème pour lequel j'ai besoin de savoir quelles versions de tout sont utilisées.
Dans Ant, cela aurait été facile, j'ai parcouru la documentation Maven et de nombreuses réponses ici mais je n'arrive toujours pas à comprendre, ce n'est sûrement pas si difficile ?
La solution
Si vous voulez être sûr que le dependency:tree
est en cours au début du test
phase alors vous devrez déplacer l'original surefire:test
objectif d'être mené après le dependency:tree
.Pour ce faire, vous devrez placer les plugins dans l’ordre dans lequel ils doivent être exécutés.
Voici un complet pom.xml
exemple qui ajoute le maven-dependency-plugin
avant le maven-surefire-plugin
.L'original default-test
est désactivé et un nouveau custom-test
est ajouté et celui-ci sera exécuté après le dependency-tree
exécution.
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.stackoverflow</groupId>
<artifactId>Q12687743</artifactId>
<version>1.0-SNAPSHOT</version>
<name>${project.artifactId}-${project.version}</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<build>
<plugins>
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.5.1</version>
<executions>
<execution>
<id>dependency-tree</id>
<phase>test</phase>
<goals>
<goal>tree</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.7.2</version>
<executions>
<execution>
<id>default-test</id>
<!-- Using phase none will disable the original default-test execution -->
<phase>none</phase>
</execution>
<execution>
<id>custom-test</id>
<phase>test</phase>
<goals>
<goal>test</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
C'est un peu gênant mais c'est ainsi que l'on peut désactiver les exécutions.
Autres conseils
Cela émettra l'arborescence de dépendance des tests:
mvn test dependency:tree -DskipTests=true
Déclarez ceci dans le POM de votre projet :
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.5.1</version>
<executions>
<execution>
<phase>test-compile</phase>
<goals>
<goal>tree</goal>
</goals>
</execution>
</executions>
</plugin>
Vous pouvez adopter ce modèle pour déclencher n'importe quel plugin pendant une phase de construction spécifique.Voir http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html#Plugins.
Voir également http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html#Lifecycle_Reference pour une liste des phases de construction.Comme le souligne Maba, vous devez sélectionner soigneusement la phase pour garantir que tree
l'objectif est exécuté au bon moment.