Maven executa “dependency:tree” no início da fase de “teste”
Pergunta
Preciso obter a saída da meta "dependency:tree" do Maven no início da fase de "teste", para ajudar a depurar um problema para o qual preciso saber quais versões de tudo estão sendo usadas.
No Ant teria sido fácil, eu olhei os documentos do Maven e inúmeras respostas aqui, mas ainda não consigo descobrir, certamente não é tão difícil?
Solução
Se você quiser ter certeza de que dependency:tree
está sendo executado no início do test
fase então você terá que mover o original surefire:test
objetivo de ser realizado após o dependency:tree
.Para fazer isso você terá que colocar os plugins na ordem em que devem ser executados.
Aqui está um completo pom.xml
exemplo que adiciona o maven-dependency-plugin
antes de o maven-surefire-plugin
.O original default-test
está desativado e um novo custom-test
é adicionado e este será executado após o dependency-tree
execução.
<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>
É um pouco estranho, mas é assim que se desabilita as execuções.
Outras dicas
Isso gerará a árvore de dependências de teste:
mvn test dependency:tree -DskipTests=true
Declare isso no POM do seu projeto:
<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>
Você pode adotar esse padrão para acionar qualquer plugin durante uma fase de construção específica.Ver http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html#Plugins.
Veja também http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html#Lifecycle_Reference para obter uma lista das fases de construção.Como aponta maba, você precisa selecionar cuidadosamente a fase para garantir o tree
objetivo é executado no momento correto.