快速定位排查maven依赖冲突:mvn dependency:tree

mvn dependency:tree

一、命令核心作用

  1. 依赖可视化
    以树形结构展示项目的依赖关系,包括:

    • 直接依赖pom.xml 中显式声明的依赖
    • 传递依赖:被直接依赖所引入的间接依赖
  2. 冲突排查
    快速定位依赖版本冲突(同一个库出现多个版本时显示路径)。

  3. 依赖溯源
    跟踪传递依赖的来源(例如:依赖 A 引入了 B)。


二、基础用法

mvn dependency:tree

输出示例

[INFO] com.example:demo:jar:1.0
[INFO] +- org.springframework:spring-core:jar:5.3.10:compile
[INFO] |  \- commons-logging:commons-logging:jar:1.2:compile
[INFO] \- junit:junit:jar:4.13.2:test
[INFO]    \- org.hamcrest:hamcrest-core:jar:1.3:test

三、进阶参数详解

参数作用示例
-Dverbose显示更详细信息(包括冲突忽略的依赖)mvn dependency:tree -Dverbose
-Dincludes=<依赖过滤器>groupId/artifactId 过滤输出mvn dependency:tree -Dincludes=org.apache.logging:*
-Dexcludes=<排除依赖>排除特定依赖mvn dependency:tree -Dexcludes=log4j:log4j
-Dscope=<作用域>按作用域过滤(如 test/compilemvn dependency:tree -Dscope=test
-DoutputFile=<文件路径>输出到文件mvn dependency:tree -DoutputFile=dependencies.txt
-DoutputType=dot生成 Graphviz 可渲染的 DOT 格式mvn dependency:tree -DoutputType=dot > deps.dot

四、过滤依赖实操

  1. 包含指定依赖
    只输出 log4j 相关依赖:

    mvn dependency:tree -Dincludes=log4j:log4j
    
  2. 排除依赖
    过滤掉 slf4j

    mvn dependency:tree -Dexcludes=org.slf4j:*
    
  3. 组合过滤
    仅检查 com.google.guavatest 作用域依赖:

    mvn dependency:tree -Dincludes=com.google.guava:* -Dscope=test
    

五、解决依赖冲突

  1. 查看冲突版本
    使用 -Dverbose 参数显示被忽略的版本:

    mvn dependency:tree -Dverbose
    

    输出示例

    [INFO] \- org.slf4j:slf4j-log4j12:jar:1.7.30:compile
    [INFO]    +- log4j:log4j:jar:1.2.17:compile
    [INFO]    \- org.slf4j:slf4j-api:jar:1.7.30:compile (版本冲突: 忽略 1.7.25)
    
  2. 分析冲突路径
    从树中定位哪个依赖引入了冲突版本,在 pom.xml 中通过 <exclusions> 解决:

    <dependency>
        <groupId>org.example</groupId>
        <artifactId>problematic-lib</artifactId>
        <exclusions>
            <exclusion>
                <groupId>conflict-group</groupId>
                <artifactId>conflict-artifact</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    

六、注意事项

  1. 依赖解析阶段
    命令会触发 Maven 的依赖解析流程(无需重新编译代码)。

  2. 多模块项目
    根目录执行时默认显示所有子模块依赖树。若需单模块:

    mvn -pl <模块名> dependency:tree
    
  3. 图形化工具
    输出为 DOT 格式后可生成可视化图:

    mvn dependency:tree -DoutputType=dot > deps.dot
    dot -Tpng deps.dot -o deps.png  # 需安装 Graphviz
    

七、典型应用场景

  • 排查 ClassNotFoundExceptionNoSuchMethodError(依赖冲突)
  • 验证新引入的依赖是否生效
  • 精简项目依赖(移除无用传递依赖)

掌握此命令能极大提升 Maven 项目依赖问题的解决效率!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值