千家信息网

Maven的依赖

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,1、Maven的依赖Maven的依赖通过dependencis元素来配置依赖,这是Maven最强大的特性之一。它支持传递性依赖。1.1 添加依赖在Maven中需要使用在dependencies中定义一
千家信息网最后更新 2026年10月31日Maven的依赖

1、Maven的依赖

Maven的依赖通过dependencis元素来配置依赖,这是Maven最强大的特性之一。它支持传递性依赖。

1.1 添加依赖

在Maven中需要使用在dependencies中定义一个或者多个dependency元素,来声明项目的一个或者多个依赖。
每个依赖元素dependency包括:

例如:为项目添加junit测试的jar包,可以按如下方式定义

      4.0.0      com.fz      ShiroTest      war      0.0.1-SNAPSHOT      ShiroTest Maven Webapp       http://maven.apache.org                               junit              junit              4.11                            test                 

1.2 依赖范围(sope)

        
依赖范围与classpath的关系
依赖范围Scope对于编译classpath有效对于测试classpath有效对于运行时classpath有效例子
compileYYYspring-core
test-Y-JUnit
providedYY-servlet-api
runtime-YYJDBC驱动实现
systemYY-本地的,Maven仓库之外的类库文件

1.3 依赖的传递性

在Maven中一个依赖不仅仅是一个JAR。它是一个POM文件,这个POM可能也声明了对其它构件的依赖。这些依赖的依赖叫做传递性依赖
所谓传递性依赖就是: 如果项目A依赖于项目B,项目B自身依赖于项目C,那么项目A它也依赖于项目C的依赖。
这种依赖是基于compile这个范围进行依赖
假如你的项目中需要依赖一个A库,这个A库自身又依赖了3个其它库。当你在dependencies中配置了A库的依赖的时候,则Maven会自动依赖3个其他库。不用你再自己去依赖了。就像Spring和Hibernate一样。你配置的时候,只需要配置Spring和Hibernate即可。
Maven在下载相应依赖的jar的时候,还会下载该jar的pom文件。这个文件对于传递性依赖特别重要。
这个pom文件跟我们现在编写的pom.xml文件没太大区别,打开后其实也是一样。
如下是hibernate-core-4.3.10.Final.jar的pom文件(hibernate-core-4.3.10.Final.pom)

  4.0.0  org.hibernate  hibernate-core  4.3.10.Final            org.jboss.logging      jboss-logging      3.1.3.GA      compile              org.jboss.logging      jboss-logging-annotations      1.2.0.Beta1      compile              org.jboss.spec.javax.transaction      jboss-transaction-api_1.2_spec      1.0.0.Final      compile              dom4j      dom4j      1.6.1      compile            Core Hibernate O/RM functionality  The core O/RM functionality as provided by Hibernate  http://hibernate.org      Hibernate.org    http://hibernate.org        jira    https://hibernate.atlassian.net/browse/HHH        http://github.com/hibernate/hibernate-orm    scm:git:http://github.com/hibernate/hibernate-orm.git    scm:git:git@github.com:hibernate/hibernate-orm.git              GNU Lesser General Public License      http://www.gnu.org/licenses/lgpl-2.1.html      See discussion at http://hibernate.org/license for more details.      repo                  hibernate-team      The Hibernate Development Team      Hibernate.org      http://hibernate.org      

可以看到hibernate-core-4.3.10.Final.pom文件中已经定义了hibernate-core-4.3.10.jar自己所依赖的jar包了。

1.2.1 依赖传递性的冲突问题
1. 第一种情况


项目A依赖于项目B1.0 ,项目C依赖于项目B1.1。项目D同时依赖于项目A和C,那么哪一个写在前面就先依赖哪个版本。
也就是说到底依赖于log4j1.2.17还是log4j1.2.16,决定于它的dependency出现的先后顺序。
哪个依赖的顺序在前面就依赖哪个
可见上面user-core在user-log前面,而user-core的log4j是1.2.17。那么最终user-dao的log4j就是1.2.17版本
同理,如果换个位置。user-log在user-core的前面。

         com.fz.user        user-log        0.0.1-SNAPSHOT                com.fz.user        user-core        0.0.1-SNAPSHOT    

那么结果就是

2. 第二种情况


如果路径的长短不一致,就选择最小路径
user-dao中的log4j路径:user-dao=====>user-core=====>log4j1.2.17
user-log中的log4j路径:user-log=====>log4j1.2.16
可见user-log的log4j路径要短一些,所以这里是1.2.16

如果这里把user-log换成user-core的话,那么user-core的log4j路径也是比user-dao的路径短。结果肯定是log4j1.2.17

假如我不想依赖user-core和user-log两个模块中的log4j呢?
那就自己再添加一个dependency试试。

可以看出Maven会优先依赖自己定义的那个dependeny

1.2.2 通过exclusions元素排除不想要的传递性依赖

以上的问题可以通过更改相应的顺序来确定依赖的版本,当然也可以使用依赖的排除功能。来精确的控制所使用的版本。
排除依赖:就是将该模块中的**jar包给移除掉。
例如:以下的情况肯定是使用了user-log的log4j版本,因为它的顺序在前面。假如现在不想通过调整顺序来改版本那就可以使用排除依赖。

排除依赖是在dependency元素下的exclusions元素,例如:我们把user-log中的log4j排除掉,那就只能去user-core中找log4j了

可以看出虽然user-log写在了上面,但是通过exclusion还是会把该模块中的log4j给排除掉。

1.2.3 依赖传递性冲突问题解决办法总结
  1. 通过调整dependency的顺序来解决:哪个依赖的顺序在前面就依赖哪个

  2. 自己添加一个dependeny来解决:因为该路径是最小的。

  3. 通过exclusions元素排除不想要的传递性依赖

1.4 依赖版本的界限

在依赖某个项目的时候,你可以不必指定特定的某个版本。也可以指定一个版本范围
(,) 不包含
[,] 包含
例如:依赖一个Junit的大于等于3.8 但是小于4.0 的版本

    junit    junit    [3.8,4.0)


项目 版本 元素 文件 路径 顺序 范围 就是 时候 配置 有效 情况 模块 问题 最小 多个 结果 还是 冲突 测试 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 百单网互联网科技有限公司怎么样 南京欣网互联网络科技有限公司 为想互联网科技怎么样 科技金融是不是互联网金融 今日互联网科技 工业互联网科技新基建 顺网科技2021年互联网排名 互联网科技热点资讯 成都互联网科技公司100强 宝灵互联网科技有限公司 互联网科技商业 深圳市罗太互联网科技有限公司 互联网科技创新的路径 中和天地互联网科技有限公司 宇信科技在杭州互联网排第几 风投北京互联网科技 福建互联网展示科技馆设计 唐山双旺合互联网科技产业园 数字互联网科技有限公司 互联网大会出现的黑科技 伟宏互联网科技 西藏七维空间互联网科技有限公司 须眉科技是互联网公司吗 互联网科技寓意 坤平互联网科技 徐州市互联网科技有限公司 工业互联网展湾科技股份有限公司 珠海东科互联网科技有限公司 广西科技产业互联网是什么 互联网科技快速发展优美句子
0