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继承方式

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

注意:
此处的继承在以后的实际开发项目中,聚合工程会用到的很多(很重要)。

4.2、dependencyManagement使用简介

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

4.3、实例演示:

  • 在父项目ebuy-1中:
    在这里插入图片描述
  • 在子项目ebuy-2中:
    在这里插入图片描述
  • 如果我们在子项目中输入相关依赖的版本号:
    在这里插入图片描述

4.4、使用优点

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

4.5、注意事项

dependencyManagement中定义的只是依赖的声明,并不实现引入,因此子项目需要显式的声明需要用的依赖。


在这里插入图片描述

一起学编程,让生活更随和!如果你觉得是个同道中人,欢迎关注博主公众号:【随和的皮蛋桑】。专注于Java基础、进阶、面试以及计算机基础知识分享🐳。偶尔认知思考、日常水文🐌。

在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一宿君

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值