广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Maven依赖管理的用法介绍
  • 138
分享到

Maven依赖管理的用法介绍

2024-04-02 19:04:59 138人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

目录一、依赖传递1. 直接依赖与间接依赖2. 依赖传递冲突时的优先规则(1) 路径优先(2) 声明优先(3) 后声明覆盖先声明二、依赖管理1. 可选依赖2. 排除依赖3. 可选依赖与

一、依赖传递

1. 直接依赖与间接依赖

pom.xml 声明了的依赖是直接依赖,依赖中又包含的依赖就是间接依赖(直接依赖的直接依赖),间接依赖虽然未被声明,但也是依赖所必须的依赖,同时间接依赖中的资源也可以直接使用

比如 A 依赖了 B,B 依赖了 C,那么 A 也就间接的依赖了 C,如果没有 C,那么 A 和 B 都无法正常运行,A 也可以直接使用 C 的内容,而可以不必再声明 C

实例如 spring-WEBmvc

 <dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-webmvc</artifactId>
	<version>5.2.10.RELEASE</version>
</dependency>

学习 Spring 时需要导入 spring-context 依赖,但学习 springMVC 时,我们会导入 spring-webmvc,此时即便会用到 Spring 的功能也无需再导入 spring-context。因为 spring-webmvc 依赖了 spring-context,spring-context 作为间接依赖被引入到了项目中,可以直接使用

2. 依赖传递冲突时的优先规则

假如一个项目中或直接或间接的多次导入了同一个依赖,就会产生依赖冲突,此时 Maven 会按照下面三种优先规则确定真正依赖的是哪个包:(主要讨论不同版本的依赖,相同版本没什么所谓)

(1) 路径优先

直接依赖优先级最高,其次是间接依赖,然后是间接依赖的直接依赖,间接依赖的间接依赖 ……

层级越深,优先级越低,或者说就近原则,离项目最近的包就是项目真正所依赖的

如下例:

<dependencies>
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-context</artifactId>
		<version>5.1.19.RELEASE</version>
	</dependency>
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-webmvc</artifactId>
		<version>5.2.10.RELEASE</version>
	</dependency>
</dependencies>

示例中引入了 spring-context 5.1.19 为直接依赖,又引入 spring-webmvc 5.2.10,其中又依赖了 spring-context 5.2.10,但它是间接依赖,所以项目中所使用的 spring-context 资源是 5.1.19 版本的(但并不代表 webmvc 中的 context 版本也被改为了 5.1.19),图中也可以看到 idea 在依赖后边给出了冲突标识

(2) 声明优先

相同层级的依赖资源,先被声明的优先

如下例:(和刚才的一样)

<dependencies>
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-context</artifactId>
		<version>5.1.19.RELEASE</version>
	</dependency>
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-webmvc</artifactId>
		<version>5.2.10.RELEASE</version>
	</dependency>
</dependencies>

和上面一样导入 spring-context 5.1.19 和 spring-webmvc 5.2.10,可以看到 context 和 webmvc 都又依赖了 aop, beans, core 等几个包,且都是间接依赖,层级相等,但由于先声明的 context 5.1.19,所以其中的 aop, core 等几个包的优先级更高

(3) 后声明覆盖先声明

同时声明了同一个依赖的不同版本,那么先声明的版本会被最后声明的版本覆盖掉(以最后一次声明为准)

如下例:

<dependencies>
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-context</artifactId>
		<version>5.1.19.RELEASE</version>
	</dependency>
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-context</artifactId>
		<version>5.2.10.RELEASE</version>
	</dependency>
</dependencies>

先声明 spring-context 5.1.19,又声明了 spring-context 5.2.10,最后使用的依赖版本为 5.2.10

二、依赖管理

分模块开发时,合理的管理依赖能够避免掉依赖冲突可能带来的麻烦。

1. 可选依赖

用于对外隐藏本项目中使用的依赖。如果项目中将某个依赖设置为可选依赖,那么其他项目引用此项目时不会加载到可选依赖。

只需在声明依赖时加入 optional 标签,设置值为 true 即可(默认为 false)

<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-context</artifactId>
	<version>5.1.19.RELEASE</version>
	<optional>true</optional>
</dependency>

如上设置后,其他项目引入此项目时,不会加载到此项目中的 spring-context 5.1.19

2. 排除依赖

引入依赖时,用于排除掉该依赖中传递来的指定依赖。

需要在声明依赖时加入 exclusions 标签,内含多个 exclusion,设置 要排除的依赖坐标,不必指定版本

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.2.10.RELEASE</version>
    <exclusions>
        <exclusion>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
        </exclusion>
    </exclusions>
</dependency>

如上设置后,本项目不会加载 spring-webmvc 依赖中包含的 spring-aop 和 spring-core

3. 可选依赖与排除依赖的异同点

相同点:

  • 功能相同:都用于阻断依赖的传递

不同点:

  • 原理不同:可选依赖对外不透明,排除依赖有传递但不采用
  • 生效时机不同:可选依赖生效在项目被引入时,排除依赖生效在引入其他项目时

到此这篇关于Maven依赖管理的用法介绍的文章就介绍到这了,更多相关Maven依赖管理内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Maven依赖管理的用法介绍

本文链接: https://www.lsjlt.com/news/166328.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Maven依赖管理的用法介绍
    目录一、依赖传递1. 直接依赖与间接依赖2. 依赖传递冲突时的优先规则(1) 路径优先(2) 声明优先(3) 后声明覆盖先声明二、依赖管理1. 可选依赖2. 排除依赖3. 可选依赖与...
    99+
    2022-11-13
  • maven依赖 pom.xml中systemPath的用法
    今天在给一个小伙伴配置项目中有一个jar包依赖怎么就下载不下来,关键是我使用他的maven本地仓库打包还报错。首先这个依赖maven官网仓库是存在的,也是可以下载的,但是他本地就是下载不下来。尝试了很多的方法,搞笑的是还给他重新安装了另一个...
    99+
    2023-10-06
    maven xml java
  • 【Maven】依赖管理—导入jar包的三种方式、依赖范围设置
    目录 一、使用坐标导入 jar 包  二、使用坐标导入 jar 包 – 快捷方式  三、使用坐标导入 jar 包 – 自动导入  四、依赖范围 一、使用坐标导入 jar 包 在 pom.xml 中编写 标签 在 标签中 使用 引入坐...
    99+
    2023-09-15
    maven jar java intellij-idea 坐标导入依赖
  • maven多个项目之间的依赖关系管理
    本篇内容主要讲解“maven多个项目之间的依赖关系管理”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“maven多个项目之间的依赖关系管理”吧!1.应用Aggregation管理多个子项目Mave...
    99+
    2023-06-17
  • Maven分模块开发与依赖管理和聚合和继承及属性深入详细介绍
    目录前言分模块开发1.1 分模块开发理念1.按照功能拆分2.按照模块拆分1.2 分模块开发实现2.依赖管理2.1 依赖传递与冲突问题2.2 可选依赖和排除依赖3.聚合和继承 ...
    99+
    2022-11-13
    Maven分模块开发 Maven依赖管理 Maven聚合
  • SpringBoot的依赖管理配置方法
    这篇文章主要介绍“SpringBoot的依赖管理配置方法”,在日常操作中,相信很多人在SpringBoot的依赖管理配置方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”SpringBoot的依赖管理配置方法...
    99+
    2023-07-02
  • python依赖包管理的方法有哪些
    Python的依赖包管理有以下几种方法:1. Pip:Pip是Python官方推荐的包管理工具,可以通过命令行使用pip来安装、卸载...
    99+
    2023-09-23
    python
  • SpringBoot项目依赖管理的方法是什么
    Spring Boot项目的依赖管理方法有以下几种: Maven:使用Maven作为构建工具,可以在项目的pom.xml文件中定...
    99+
    2023-10-27
    SpringBoot
  • SpringBoot依赖管理和自动装配的方法
    这篇文章主要介绍了SpringBoot依赖管理和自动装配的方法的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇SpringBoot依赖管理和自动装配的方法文章都会有所收获,下面我们一起来看看吧。1.1依赖管理父项...
    99+
    2023-06-29
  • 宝塔Linux面板安装Composer依赖管理工具与PHP依赖包的方法
    最近看见腾讯云有一个AI绘画还挺有意思,想搞来写个接口玩  但是Composer一直运行不成功 提示xdebug什么的 最后经过搜索 发现 需要删除你宝塔里所有php中禁用的putenv函数 然后重启php就可以了!  然后就可以运行这...
    99+
    2023-10-08
    composer php
  • 一篇文章带你了解Maven的坐标概念以及依赖管理
    目录1、什么是坐标?①、数学中的坐标②、Maven 中的坐标③、Maven 坐标和仓库,jar 包的关系2、什么是依赖?3、依赖的详细配置4、依赖的范围 scope1、compile...
    99+
    2022-11-13
  • SpringBoot中的Condition包下常用条件依赖注解案例介绍
    目录一、@ConditionalOnClass() Spring中存在指定class对象时,注入指定配置1.首先引入pom依赖2.实体类测试对象3.定义@ConditionalOnC...
    99+
    2022-11-13
  • Prism区域管理器IRegionManager用法介绍
    概要 本文主要介绍Prism的IRegionManager, 主要分析源代码的执行流程, 来介绍内部实现的几个核心接口调用过程。 通过本文, 你可以熟练的掌握Prism当中以下接口的...
    99+
    2022-11-13
  • AndroidStudio Gradle第三依赖统一管理的实现方法
    小编给大家分享一下AndroidStudio Gradle第三依赖统一管理的实现方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!AndroidStudio由于使...
    99+
    2023-05-30
    androidstudio gradle
  • MongoD管理数据库的方法介绍
    今天主要了解数据库管理,在操作之前先把MongoDB服务打开。 一、显示数据库清单 如果想查看数据库列表可以使用show dbs. 二、切换数据库 通过使用MongoDB中内置的句柄db来执行数据库操作。要对不同的数据...
    99+
    2022-07-07
    MongoDB 数据库管理
  • Linux系统中的用户管理方法介绍
    本篇内容主要讲解“Linux系统中的用户管理方法介绍”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Linux系统中的用户管理方法介绍”吧!用户管理的配置文件用户信息文件:/etc/passwd密...
    99+
    2023-06-12
  • 如何使用NPM来管理Java的版本依赖?
    在Java的开发过程中,我们经常需要使用到各种各样的库和框架,这些依赖的版本管理是非常重要的一项工作。在Node.js的生态中,我们通常会使用NPM来管理依赖,那么,我们是否也可以使用NPM来管理Java的版本依赖呢?本文将会介绍如何使用...
    99+
    2023-09-23
    索引 npm leetcode
  • 如何使用NPM来管理您的项目依赖?
    对于前端开发人员来说,项目依赖的管理一直是一个非常重要的任务。如果您经常使用Node.js来构建应用程序,那么您应该已经熟悉了NPM(Node Package Manager)。NPM是一个包管理器,它允许您轻松地管理您的项目依赖。在本篇...
    99+
    2023-08-30
    索引 git npm
  • Linux用户和用户组管理方法介绍
    目录一、用户账号的管理1、添加新的用户账号使用useradd命令,其语法如下:2、删除帐号3、修改帐号4、用户口令的管理二、用户组的管理1、增加一个新的用户组使用groupadd命令。其格式如下:2、如果要删除一个已有的...
    99+
    2022-06-05
    Linux 用户管理 用户组管理
  • Bash中如何使用NPM管理Spring应用的依赖?
    Spring是一个流行的Java应用框架,用于构建企业级应用程序。与其他开源框架一样,Spring也需要依赖库的支持。在本文中,我们将介绍如何使用npm管理Spring应用的依赖。 npm是一个流行的Node.js包管理器,它可以帮助我们...
    99+
    2023-09-10
    npm bash spring
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作