Maven查看依赖树

一、依赖树是什么?

在介绍Maven查看依赖树之前,我们先来了解一下什么是依赖树。在Maven中,当我们在一个项目中引入外部依赖时,这些依赖项本身又可能引入其他的依赖项,这就形成了一个以当前项目为根节点的依赖树结构。如下图所示:

    my-project  
    ├── org.springframework:spring-context:jar:5.2.8.RELEASE:compile  
    │   ├── org.springframework:spring-aop:jar:5.2.8.RELEASE:compile  
    │   ├── org.springframework:spring-beans:jar:5.2.8.RELEASE:compile  
    │   └── org.springframework:spring-core:jar:5.2.8.RELEASE:compile  
    ├── org.springframework:spring-web:jar:5.2.8.RELEASE:compile  
    │   └── org.springframework:spring-webmvc:jar:5.2.8.RELEASE:compile  
    ├── org.springframework.security:spring-security-web:jar:5.3.5.RELEASE:compile  
    │   ├── org.springframework.security:spring-security-core:jar:5.3.5.RELEASE:compile  
    │   └── org.springframework:spring-expression:jar:5.2.8.RELEASE:compile  
    └── org.slf4j:slf4j-log4j12:jar:1.7.30:compile  
        └── log4j:log4j:jar:1.2.17:compile  

上图展示了一个简单的依赖树结构,其中根节点为my-project,my-project依赖于四个直接子节点:spring-context、spring-web、spring-security-web和slf4j-log4j12。这些直接子节点又会继续引入其他的依赖项。

二、Maven查看依赖树可以干什么?

Maven查看依赖树的主要作用是帮助我们分析项目依赖关系,方便我们在引入新依赖时避免版本冲突甚至不必要的重复引入。下面就来介绍一下Maven查看依赖树功能的具体使用方法。

三、Maven查看依赖树的命令

我们可以通过Maven命令行工具的“mvn”命令来查看一个Maven项目的依赖树。具体命令如下:

mvn dependency:tree

执行这个命令后,Maven就会在控制台输出当前项目的依赖树结构。

$ mvn dependency:tree  
[INFO] Scanning for projects...  
[INFO]                                                                                                                                                                            
[INFO] ------------------------  
[INFO] Building my-project 1.0-SNAPSHOT  
[INFO] --------------------------------[ jar ]---------------------------------  
[INFO]  
[INFO] --- maven-dependency-plugin:3.1.2:tree (default-cli) @ my-project ---  
[INFO] com.example:my-project:jar:1.0-SNAPSHOT  
[INFO] \- org.springframework:spring-context:jar:5.2.8.RELEASE:compile  
[INFO]    +- org.springframework:spring-aop:jar:5.2.8.RELEASE:compile  
[INFO]    +- org.springframework:spring-beans:jar:5.2.8.RELEASE:compile  
[INFO]    +- org.springframework:spring-core:jar:5.2.8.RELEASE:compile  
[INFO]    \- org.springframework:spring-expression:jar:5.2.8.RELEASE:compile  
[INFO]                                                                                                                       
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS  
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  0.748 s
[INFO] Finished at: 2021-08-05T14:21:39+08:00
[INFO] ------------------------------------------------------------------------

四、Maven查看依赖树的输出内容

命令执行后,Maven会在控制台输出当前项目的依赖树结构,具体内容包括:

  • 当前项目信息,包括项目名称、版本和构建类型等
  • 依赖树结构,以树形结构展示当前项目的依赖关系
  • 依赖关系信息,包括依赖包名称、版本和依赖范围等

五、依赖范围的含义

在依赖关系信息中,我们可以看到一个参数叫做“依赖范围”。依赖范围描述了当前依赖项被所依赖的项目使用的程度。具体的依赖范围包括:

  • compile
  • provided
  • runtime
  • test
  • system

这些依赖范围的含义分别是:

  • compile:默认的依赖范围,表示在编译、测试、执行时都需要使用这个依赖。
  • provided:该依赖项在编译、测试中需要,但是在打包时不需要包含,因为在运行时由JDK或者服务器提供,比如servlet-api。
  • runtime:该依赖项在编译时不需要,但是在测试和运行时需要,例如JDBC驱动。
  • test:该依赖项只在测试时使用,不能在编译和运行时使用。
  • system:该依赖项由系统提供,需要在POM文件中显示指定它的路径,一般不建议使用此依赖范围。

六、排除依赖的方法

Maven的依赖管理可以自动引入依赖包的版本,但是当同一项依赖被不同的模块引用时,版本冲突会导致编译失败或者运行时错误。在这种情况下,我们就需要指定排除某个模块的依赖。在POM文件中可以通过<exclusions>标签进行排除。例如:

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>5.2.8.RELEASE</version>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.security</groupId>
                <artifactId>spring-security-core</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

上述代码中,排除了spring-context依赖中的spring-security-core组件。

七、依赖树的过滤

在实际项目开发中,可能会遇到需要筛选特定依赖的需求。Maven提供了-d和-D两个参数用于过滤依赖树,具体含义如下:

  • -D包含:只显示符合条件的依赖项。
  • -D排除:不显示符合条件的依赖项。
  • -D输出类型:以文本方式输出或者以DOT格式输出(便于绘制依赖图)。

具体命令如下:

mvn dependency:tree -Dincludes=groupId:artifactId:version

其中,includes参数表示指定需要包含的依赖,可以指定groupId、artifactId、version等多个条件,各个条件之间使用冒号隔开,例如:

mvn dependency:tree -Dincludes=org.springframework:spring-web,com.google.guava:*

上述命令的含义是,只显示groupId为org.springframework且artifactId为spring-web或者groupId 为com.google.guava的依赖。

八、结语

本文主要介绍了Maven查看依赖树的相关知识,包括了依赖树的概念、命令、输出内容、依赖范围、排除依赖和依赖树的过滤等方面。掌握了这些知识,我们可以更加方便快捷地管理Maven项目的依赖关系,提高开发效率。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/227473.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝的头像小蓝
上一篇 2024-12-09 16:30
下一篇 2024-12-09 16:30

相关推荐

  • 深入了解scala-maven-plugin

    一、简介 Scala-maven-plugin 是一个创造和管理 Scala 项目的maven插件,它可以自动生成基本项目结构、依赖配置、Scala文件等。使用它可以使我们专注于代…

    编程 2025-04-25
  • Maven配置阿里云镜像详解

    Maven是一个基于项目对象模型(POM)的构建工具,用于管理Java项目的构建、依赖和发布。在使用Maven下载依赖库时,原始仓库服务器可能因为网络原因导致下载速度缓慢或者失败。…

    编程 2025-04-25
  • IDEA安装Maven插件

    一、为什么需要安装Maven插件? Maven是一款Java开发的构建工具,可以自动化构建、测试和部署Java项目。而Maven插件则是将Maven与IDEA集成,使得开发过程变得…

    编程 2025-04-25
  • 如何查看maven安装路径

    一、通过maven命令查看 mvn -v 执行以上命令,可以在控制台输出maven相关信息,包括maven的版本、Java的版本、操作系统等,其输出信息中包含了maven的安装路径…

    编程 2025-04-25
  • Maven私有仓库搭建详解

    作为一个开发者,在进行项目构建时,我们都经常使用到 Maven 工具。在这个过程中,我们有时候需要引入一些第三方依赖包,但是在国内有时候会遇到访问外网慢的问题,因此我们可以搭建一个…

    编程 2025-04-25
  • maven linux:从管理依赖到构建应用的全过程

    一、maven linux概述 maven linux是一款开源的项目管理和构建自动化工具。它帮助开发人员在项目构建的过程中管理依赖,自动构建应用,并且可以生成项目文档等。mave…

    编程 2025-04-25
  • Maven打Jar包

    一、Eclipse Plugin中的Maven打Jar包 Eclipse是Java开发人员广泛使用的集成开发环境(IDE),因此,我们首先来探讨在Eclipse中如何使用Maven…

    编程 2025-04-24
  • Mac Maven配置指南

    一、安装Maven 作为一个Java开发者,Maven的安装是必不可少的。首先,我们需要到官网上下载安装Maven,接下来,我们按照以下步骤进行安装: brew install m…

    编程 2025-04-24
  • Win10配置Maven

    一、Maven简介 Maven 是一个基于 Java 的项目管理工具, 主要的功能包括项目构建、依赖管理、环境配置等。它是一种使用了基于项目对象模型(POM)的概念来管理项目的构建…

    编程 2025-04-23
  • Maven配置环境变量详解

    一、Maven简介 Maven是一款开源的项目管理工具,基于POM(项目对象模型)来管理项目的构建、依赖、文档等。它提供了一个中央仓库来管理软件包依赖,使得我们能够集中管理项目的依…

    编程 2025-04-23

发表回复

登录后才能评论