Maven依赖关系 - 极悦
首页 课程 师资 教程 报名

Maven依赖关系

  • 2021-07-14 15:54:43
  • 1211次 极悦

1.何为依赖?

我们在平时的项目开发中也是同理,你需要依赖一些东西才能实现相应的功能,但相应的功能或许也可以依赖其它的东西实现,比如数据库操作吧,你可以依赖hibernate,但你也可以通过mybatis来做。

这就是所谓的依赖关系咯。

以前我们需要手动的去找hibernate或者mybatis的jar包,系统抛异常我们还不知哪里报错,通过琢磨才明白没有引入相应的jar包,然后就去找啊找,找到了然后引入到工程当中。在这里我们就看到maven的好处了,它就是一个仓库,仓库里面有各种各样的包,想要什么就在pom.xml中依赖一下就好了,就算仓库中没有的包也可以把它扔到仓库中,想用的时候就依赖一下。

2.依赖传递的范围

(1)根据Jar包的不同,需要为其设置不同的传递方式,即传递范围。Maven中的依赖传递范围设置在<scope>标签中。其取值有6种:

1)compile

第1类Jar包应设置的范围。是默认值。其会向下传递该依赖。

2)test

第2类Jar包应设置的范围。其不会向下传递该依赖。

3)provided

第3类Jar包应设置的范围。其不会向下传递该依赖。

4)runtime

第4类Jar包应设置的范围。其会向下传递该依赖。

5)system

不从本地仓库查找指定的依赖,而从<systemPath>路径查找。

3.依赖关系分类

A.直接依赖

项目A要用到别的项目B的架构的东西,所以项目A直接依赖B项目

B.间接依赖

项目B依赖A,C依赖B,那么C间接依赖A

C.依赖传递性

Maven的依赖是具有传递性的,比如A-&gt;B,B-&gt;C,那么A间接的依赖于C,这就是依赖的传递性,其中A对于B是第一直接依赖,B对于C是第二直接依赖,C为A的传递性依赖。

D.可选依赖与排除依赖

传递性依赖会给项目隐式的引入很多依赖,这极大的简化了项目依赖的管理,但是有些时候这种特性也会带来问题,它可能会把我们不需要的jar包也引入到了工程当中,使项目结构变得更复杂。或者你想替换掉默认的依赖换成自己想要的jar包,这时候就需要用到依赖排除。

Maven依赖关系

例子中spring-core包依赖了commons-logging包,我们使用exclusions元素声明排除依赖,exclusions可以包含一个或者多个exclusion子元素,因此可以排除一个或者多个传递性依赖。需要注意的是,声明exclusions的时候只需要groupId和artifactId,而不需要version元素,这是因为只需要groupId和artifactId就能唯一定位依赖图中的某个依赖。换句话说,Maven解析后的依赖中,不可能出现groupId和artifactId相同,但是version不同的两个依赖。

Maven依赖关系

E.依赖冲突(调解)

下面我们来思考这样一个问题,如果A-&gt;B-&gt;C-&gt;X(1.0),A-&gt;D-X(2.0),即A间接依赖X,我们可以看到有两条路径都依赖X,那么maven将会选择哪个版本的X?maven当中有一套自己的规则,我们来说明一下,maven传递性依赖的一些规则以及如何排除依赖冲突。

Maven里面对于传递性依赖有以下几个规则:

1.最短路径原则:如果A对于依赖路径中有两个相同的jar包,那么选择路径短的那个包,路径最近者优先,上述会选X(2.0)。

2.第一声明优先原则:如果A对于依赖路径中有两个相同的jar包,路径长度也相同,那么依赖写在前面的优先。例如:A->B->F(1.0),A->C->F(2.0),会选F(1.0)。

3.可选依赖不会被传递,如A->B,B->;C,B->;D,A对B直接依赖,B对C和D是可选依赖,那么在A中不会引入C和D。可选依赖通过optional元素配置,true表示可选。如果要在A项目中使用C或者D则需要显式地声明C或者D依赖。

版本号统一管理

聚合

在Maven中,可能我们要做多个test,但是一个一个的测试去做,这样会很麻烦,为了简单方便,我们把所有的test package,都汇聚到一个package中,我们利用这个测试可以进行所有的test的测试,这个过程就是聚合。目前菜鸟的水平来看这个聚合,主要功能就是方便Test的!

以上就是极悦小编介绍的"Maven依赖关系",希望对大家有帮助,想了解更多可查看Maven教程。极悦在线学习教程,针对没有任何Java基础的读者学习,让你从入门到精通,主要介绍了一些Java基础的核心知识,让同学们更好更方便的学习和了解Java编程,感兴趣的同学可以关注一下。

选你想看

你适合学Java吗?4大专业测评方法

代码逻辑 吸收能力 技术学习能力 综合素质

先测评确定适合在学习

在线申请免费测试名额
价值1998元实验班免费学
姓名
手机
提交