maven项目之间的依赖管理

Maven 依赖管理

Maven 一个核心的特性就是依赖管理。当我们处理多模块的项目(包含成百上千个模块或者子项目),模块间的依赖关系就变得非常复杂,管理也变得很困难。针对此种情形,Maven提供了一种高度控制的方法。

可传递性依赖发现

  • 一种相当常见的情况,比如说 A 依赖于其他库 B。如果,另外一个项目 C 想要使用 A ,那么 C 项目也需要使用库 B。
  • Maven 可以避免去搜索所有所需库的需求。Maven 通过读取项目文件(pom.xml),找出它们项目之间的依赖关系。
  • 我们需要做的只是在每个项目的 pom 中定义好直接的依赖关系。其他的事情 Maven 会帮我们搞定。

1、首先在idea中创建一个空项目

在这里插入图片描述
在这里插入图片描述

2、ideaworkspace空项目建好后,在这个空项目空间中,点击新建模块

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
同上述步骤,再次创建模块ebuy-2:
在这里插入图片描述

在这里插入图片描述

3、maven项目依赖关系

3.1、简单来说就是连个项目之间可以相互依赖,并且使用彼此的jar包依赖文件。

我们简单举个例子,就是在项目ebuy-1中引入依赖文件,在项目ebuy-2中引用项目ebuy-1。
在这里插入图片描述
在这里插入图片描述

3.2、简单测试一下mysql驱动依赖在ebuy-2中是否可以用

在这里插入图片描述
在这里插入图片描述

上述情况时,ebuy-2项目中引用了ebuy-1项目,而ebuy-1项目又依赖了mysql驱动包,所以就都在ebuy-2项目中显示出来了,并且经过测试cbuy-2可以使用引用的mysql驱动。

3.3、跨项目工具类引用

在这里插入图片描述
在这里插入图片描述

3.4、maven依赖控制范围

scope标签参数如下:

  • compile:编译依赖范围(默认),使用此依赖范围对于编译、测试、运行三种 classpath 都有效,即在编译、测试和运行的时候都要使用该依赖jar包;
  • test:测试依赖范围,从字面意思就可以知道此依赖范围只能用于测试classpath,而在编译和运行项目时无法使用此类依赖,典型的是JUnit,它只用于编译测试代码和运行测试代码的时候才需要;
  • provided:此依赖范围,对于编译和测试classpath有效,而对运行时无效;
  • runtime:运行时依赖范围,对于测试和运行classpath有效,但是在编译主代码时无效,典型的就是JDBC驱动实现(这个一般很少用到);
    在这里插入图片描述

optional标签参数如下:

  • 如果是true,则表示该项目下的jar包不能被引用,但是该项目还是可以被引用的,其工具类也不受限制。
  • 如果是false,则表示该项目下的jar包可以被引用,但是该项目还是可以被引用的,其工具类也不受限制。
    在这里插入图片描述

    scope默认是compile
    optional默认是false

3.6、maven依赖排除

在项目引用中,我们一般会将所有jar包和工具类创建在一个项目中,然后这个项目供其他项目引用,也就行相当于调用。但是有时候我们在其他项目中需要使用某个jar包的更高版本,这个时候从引用项目中所得到的jar包就不适用了,还需要我们自己再导入更高版本的依赖文件,然后再把原来的引用项目所得到的jar包给排除掉。
演示如下:
在这里插入图片描述
在这里插入图片描述

4、maven项目继承关系(推荐)

4.1、parent继承方式

在这里插入图片描述
在这里插入图片描述

注意:
此处的继承在以后的实际开发项目中,聚合工程会用到的很多(很重要)。 子项目可以继承父项目中的所有依赖,可以直接使用父项目中的类文件和类方法,和java中的继承是一样的。 但是parent一般和dependencyManagement一起使用。

4.2、dependencyManagement使用简介

Maven中的dependencyManagement元素提供了一种管理依赖版本号的方式。在dependencyManagement元素中声明所依赖的jar包的版本号等信息(也即是在父项目中声明),那么所有子项目再次引入此依赖jar包时则无需显式的列出版本号,只需列出所需要用的依赖。Maven会沿着父子层级向上寻找拥有dependencyManagement
元素的项目,然后使用它指定的版本号。

4.3、实例演示:

  • 在父项目ebuy-1中:
    在这里插入图片描述
  • 在子项目ebuy-2中:
    在这里插入图片描述
  • 如果我们在子项目中输入相关依赖的版本号:此处子项目中引入的版本号会生效,会覆盖副父项目的依赖版本号,以子项目中的依赖版本号为准。

在这里插入图片描述

4.4、使用优点

如果有多个子项目都引用同一样依赖,则可以避免在每个使用的子项目里都声明一个版本号。当想升级或切换到另一个版本时,只需要在顶层父容器里更新,而不需要逐个修改子项目;另外如果某个子项目需要另外的一个版本,只需要声明version即可,会自动覆盖掉父项目中的version。

4.5、注意事项

dependencyManagement中定义的只是依赖的声明,并不实现引入,因此子项目需要显式的声明需要用的依赖。需要再子项目pom中通过denpendenies标签的方式引入。


在这里插入图片描述

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值