9

我需要在“测试”阶段开始时从 Maven 获取“依赖:树”目标输出,以帮助调试我需要知道正在使用的所有版本的问题。

在 Ant 中这很容易,我在这里查看了 Maven 文档和许多答案,但仍然无法弄清楚,肯定不是那么难吗?

4

3 回答 3

18

这将输出测试依赖树:

mvn test dependency:tree -DskipTests=true
于 2014-01-01T10:36:14.643 回答
6

如果您想确保在阶段开始dependency:tree正在运行,那么您必须将原始目标移至在阶段开始之后进行。为此,您必须按照它们应该运行的顺序放置插件。testsurefire:testdependency:tree

这是pom.xml一个maven-dependency-pluginmaven-surefire-plugin. 原来default-test的被禁用并custom-test添加了一个新的,这个将在执行后运行dependency-tree

<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>

这有点尴尬,但这是禁用执行的方法。

于 2012-10-02T09:57:59.913 回答
4

在你的项目 POM 中声明:

 <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>

您可以采用此模式在特定构建阶段触发任何插件。请参阅http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html#Plugins

另请参阅http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html#Lifecycle_Reference以获取构建阶段的列表。正如 maba 指出的那样,您需要仔细选择阶段以确保tree在正确的时间执行目标。

于 2012-10-02T09:37:13.660 回答