Maven 指令:mvn dependency:tree 查看依赖

mvn dependency:tree 是 Maven 中一个非常有用的命令,用于显示当前项目的所有依赖及其依赖关系。这使得我们可以清晰地了解项目的依赖树,帮助调试和解决依赖冲突问题。

1. 基本用法

要查看 Maven 项目的依赖树,只需在项目的根目录下运行以下命令:

mvn dependency:tree

此命令会列出项目所有的直接和间接依赖关系。依赖树的结构呈现了所有库的层级结构,显示出每个依赖的版本、范围和传递的关系。

输出示例:

[INFO] Scanning for projects...
[INFO] 
[INFO] --------------------< com.example:myproject >--------------------
[INFO] Building My Project 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- maven-dependency-plugin:3.1.1:tree (default-cli) @ myproject ---
[INFO] com.example:myproject:jar:1.0-SNAPSHOT
[INFO] +- org.springframework.boot:spring-boot-starter:jar:2.5.4:compile
[INFO] |  +- org.springframework.boot:spring-boot:jar:2.5.4:compile
[INFO] |  |  +- org.springframework:spring-context:jar:5.3.9:compile
[INFO] |  |  +- org.springframework:spring-core:jar:5.3.9:compile
[INFO] |  |  +- org.springframework:spring-beans:jar:5.3.9:compile
[INFO] |  +- org.springframework.boot:spring-boot-autoconfigure:jar:2.5.4:compile
[INFO] |  +- org.springframework.boot:spring-boot-starter-logging:jar:2.5.4:compile
[INFO] |  |  +- ch.qos.logback:logback-classic:jar:1.2.6:compile
[INFO] |  |  +- ch.qos.logback:logback-core:jar:1.2.6:compile
[INFO] +- org.springframework.boot:spring-boot-starter-data-jpa:jar:2.5.4:compile
[INFO] |  +- org.springframework.boot:spring-boot-starter-jdbc:jar:2.5.4:compile
[INFO] |  |  +- org.springframework:spring-jdbc:jar:5.3.9:compile
[INFO] |  +- org.springframework.data:spring-data-jpa:jar:2.5.4:compile
[INFO] |  +- javax.persistence:javax.persistence-api:jar:2.2:compile
[INFO] +- org.hibernate:hibernate-core:jar:5.5.4.Final:compile
[INFO] |  +- org.javassist:javassist:jar:3.27.0-GA:compile
[INFO] |  +- org.jboss.logging:jboss-logging:jar:3.4.1.Final:compile
...

2. 依赖树输出的解读

  • com.example:myproject:jar:1.0-SNAPSHOT: 项目的根依赖,表示项目本身。
  • +- 表示该依赖是当前模块的直接依赖。
  • 子依赖列表:例如 org.springframework.boot:spring-boot-starter 是直接依赖的 spring-boot-starter包,它又有一系列的子依赖,像 spring-bootspring-context 等。
  • compile: 这是该依赖的范围,表示它是项目的编译时依赖。

3. 常用选项

  • 显示传递性依赖:mvn dependency:tree 默认会显示所有传递性依赖。如果你只想查看直接的依赖,可以使用 -Dverbose 参数:mvn dependency:tree -Dverbose
  • 仅查看某个范围的依赖:如果你只想查看特定范围的依赖(如 compiletest 等),可以使用 -Dscope 参数。例如:mvn dependency:tree -Dscope=compile 这会只显示编译时的依赖,而不会显示测试或运行时的依赖。
  • 以文本形式输出:mvn dependency:tree 默认是输出在控制台上,使用 -DoutputFile 选项可以将依赖树输出到指定的文件中:mvn dependency:tree -DoutputFile=dependencies.txt
  • 显示特定依赖的树:如果你想查看某个特定依赖的树结构,可以使用 -Dincludes 参数。例如:mvn dependency:tree -Dincludes=org.springframework.boot:spring-boot-starter 这只会显示 spring-boot-starter 的依赖树。
  • 排除特定依赖:如果你想排除某个特定的依赖,使用 -Dexclude 参数:mvn dependency:tree -Dexclude=org.springframework.boot:spring-boot-starter-logging 这会在输出的依赖树中排除掉 spring-boot-starter-logging 这个依赖。

4. 解决依赖冲突

mvn dependency:tree 很有帮助,尤其是在解决 依赖冲突 时。假如你有多个版本的同一个依赖被引入,可以通过查看依赖树来定位冲突的来源。根据输出的信息,你可以决定保留哪个版本,或使用 <dependencyManagement> 来强制指定一个版本。

5. 总结

  • mvn dependency:tree 是查看 Maven 项目所有依赖的强大工具,帮助开发者了解项目中所有直接和传递的依赖关系。
  • 可以使用多种参数来控制输出,如 -Dscope-Dverbose-DoutputFile 等,来更精细地查看依赖关系。
  • 在解决依赖冲突和分析项目依赖时,mvn dependency:tree 是一个非常重要的工具。

希望这能帮助你更好地理解和使用 Maven 的 dependency:tree 命令!