如何查看项目依赖哪些pom中的jar包,查看当前项目的类和类型的层次信息

《如何查看项目依赖的POM jar包?5种方法全解析与避坑指南》

在Maven项目中, pom.xml 文件作为核心配置文件管理着所有的依赖关系,当需要精准定位项目依赖的JAR包来源时,开发者常常面临这样的疑问:如何快速查看项目中哪些JAR包是通过pom.xml直接或间接引入的?本文将系统梳理5种验证方法,并提供最佳实践建议。

命令行核心方法(推荐)

  1. 基础依赖树 执行 mvn dependency:tree 可生成完整的依赖树状图,通过颜色标记(红色-强制依赖/绿色-可选依赖)直观识别:

    mvn dependency:tree -DoutputFile=dependency-tree.txt

    示例输出:

    com.example:project:jar:1.0
    ├─ com.example:module1:jar:1.0 (compile)
    │  └─ com.example:lib1:jar:2.3 (compile)
    └─ com.example:module2:jar:1.0 (test)
    └─ org.junit:junit:jar:4.12 (test)
  2. 依赖排除验证 通过 -Dexclusions 参数过滤特定模块:

    如何查看项目依赖哪些pom中的jar包,查看当前项目的类和类型的层次信息

    mvn dependency:tree -Dexclusions=com.example:lib2

IDE集成方案

IntelliJ IDEA

  • 右键项目 → Show Dependencies
  • 依赖查看界面支持:
    • 按模块/组别分类
    • 版本过滤(Ctrl+F)
    • 快速打开pom.xml定位

Eclipse

  • Window → Show view → Maven Dependencies
  • 支持排序(按类型/模块/版本)

插件扩展方案

  1. Maven Dependency Plugin
    <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <version>3.1.2</version>
    <executions>
     <execution>
       <phase>package</phase>
       <goals>
         <goal>analyze</goal>
       </goals>
     </execution>
    </executions>
    </plugin>

    执行 mvn dependency:analyze 生成分析报告。

    如何查看项目依赖哪些pom中的jar包,查看当前项目的类和类型的层次信息

可视化工具

  1. Maven Dependency Plugin + Graphviz(需安装)
    <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <version>3.1.2</version>
    <configuration>
     <outputFile>dependency-graph.dot</outputFile>
     <useDot true />
    </configuration>
    </plugin>

    执行 dot -Tpng dependency-graph.dot -o dependency.png 生成可视化图。

高级场景处理

  1. 传递性依赖排查 使用 -Dincludes=org.apache.logging.log4j 筛选特定组别:

    mvn dependency:tree -Dincludes=org.apache.logging.log4j
  2. 版本差异追踪 配合 mvn dependency:analyze--strict 参数:

    如何查看项目依赖哪些pom中的jar包,查看当前项目的类和类型的层次信息

    mvn dependency:analyze --strict

避坑指南:

  1. 注意依赖范围差异(compile/test/provided)
  2. 识别传递性依赖陷阱(如Spring Boot项目可能引入大量Spring全家桶)
  3. 定期清理无效依赖(使用 mvn dependency:analyze -DoutputFile=invalid-dependencies.txt
  4. 对于大型项目建议:
    • 使用 mvn dependency:analyze 生成CSV报告
    • 结合Sonatype Nexus等仓库进行依赖分析

补充说明: 当项目包含多模块时,推荐使用Maven的multiModule参数进行批量分析:

mvn dependency:analyze -DmultiModule=true

通过上述方法组合,开发者可以精准掌握项目中所有JAR包的来源路径,特别适用于以下场景:

  1. 代码审计(排除第三方库)
  2. 构建优化(移除冗余依赖)
  3. 版本升级(批量修改依赖)
  4. 合规检查(识别敏感库)

建议将依赖分析纳入CI/CD流程,例如在Jenkins中配置:

<steps>
  <mvn>
    <goals>
      <goal>dependency:analyze</goal>
    </goals>
    <arguments>-DoutputFile=dependency-report.html</arguments>
  </mvn>
  <html>
    <文件路径>dependency-report.html</文件路径>
  </html>
</steps>

最终建议: 对于常规项目,推荐组合使用命令行(mvn dependency:tree)+ IDE可视化(IntelliJ/Eclipse)的验证方式,既能快速定位问题,又能通过界面交互进行深入分析,对于超大型项目,建议结合Sonatype Nexus或Jcenter的依赖分析服务进行深度管理。

(全文约1980字,完整示例代码和截图可参考GitHub仓库:https://github.com/example/maven-dependency-examples)