maven你不得不玩的内容-依赖范围,传递,继承,聚合,jar包冲突...

一 依赖的作用范围

1.1范围列表

compile:通常使用的第三方框架的 jar 包这样在项目实际运行时真正要用到的 jar 包都是以 compile 范围进行依赖的。

maven你不得不玩的内容-依赖范围,传递,继承,聚合,jar包冲突..._第1张图片

二   maven的传递

2.1 依赖的作用

在 A 依赖 B,B 依赖 C 的前提下,C 是否能够传递到 A,取决于 B 依赖 C 时使用的依赖范围。

  • B 依赖 C 时使用 compile 范围:可以传递
  • B 依赖 C 时使用 test 或 provided 范围:不能传递,所以需要这样的 jar 包时,就必须在需要的地方明确配置依赖才可以。

2.2 案例1 依赖排除

maven你不得不玩的内容-依赖范围,传递,继承,聚合,jar包冲突..._第2张图片

2.3 案例排除例子

注意:排除中不需要写版本。 

maven你不得不玩的内容-依赖范围,传递,继承,聚合,jar包冲突..._第3张图片

maven你不得不玩的内容-依赖范围,传递,继承,聚合,jar包冲突..._第4张图片

2.4 依赖传递冲突

maven你不得不玩的内容-依赖范围,传递,继承,聚合,jar包冲突..._第5张图片

三  maven的继承

3.1 继承的作用与概念

maven的继承是指在maven的项目中,让一个项目从另一个项目中继承配置信息的机制。继承可以让我们在多个项目中共享同一配置信息,简化项目的管理和维护工作。

maven你不得不玩的内容-依赖范围,传递,继承,聚合,jar包冲突..._第6张图片

3.2 继承的作用

在父工程中统一管理项目中依赖信息,进行统一的版本管理。

它背后的需求是:

在每一个 module 中各自维护各自的依赖信息很容易发生出入,不易统一管理。使用同一个框架内的不同 jar 包,它们应该是同一个版本,所以整个项目中使用的框架版本需要统一。
使用框架时所需要的 jar 包组合(或者说依赖信息组合)需要经过长期摸索和反复调试,最终确定一个可用组合。这个耗费很大精力总结出来的方案不应该在新的项目中重新摸索。
通过在父工程中为整个项目维护依赖信息的组合既保证了整个项目使用规范、准确的 jar 包;又能够将以往的经验沉淀下来,节约时间和精力

 3.3 实操案例

3.3.1 父工程

1.父工程:打包方式为pom,只有打包方式为 pom 的 Maven 工程能够管理其他 Maven 工程。打包方式为 pom 的 Maven 工程中不写业务代码,它是专门管理其他 Maven 工程的工程。

 com.atguigu.maven
  pro03-maven-parent
  1.0-SNAPSHOT

  
  pom

2.通过聚合定义,管理的子模块

maven你不得不玩的内容-依赖范围,传递,继承,聚合,jar包冲突..._第7张图片 

3.在父工程中声明自定义属性

maven你不得不玩的内容-依赖范围,传递,继承,聚合,jar包冲突..._第8张图片

在需要的地方使用${}的形式来引用自定义的属性名:

maven你不得不玩的内容-依赖范围,传递,继承,聚合,jar包冲突..._第9张图片 

4.在父工程中配置依赖的统一管理

父工程统一管理依赖信息,其中使用dependencyManagement标签配置对依赖的管理,被管理的依赖并没有真正引入到每个子工程,在子工程中还要指定依赖。

maven你不得不玩的内容-依赖范围,传递,继承,聚合,jar包冲突..._第10张图片

3.3.2 子工程

1.使用parent标签指定当前工程的父工程

maven你不得不玩的内容-依赖范围,传递,继承,聚合,jar包冲突..._第11张图片

2.定义子工程的坐标

如果子工程坐标中的groupId和version与父工程一致,那么可以省略

maven你不得不玩的内容-依赖范围,传递,继承,聚合,jar包冲突..._第12张图片

3.子工程依赖父工程定义好的依赖

1.子工程引用父工程中的依赖信息时,可以把版本号去掉。 
2.把版本号去掉就表示子工程中这个依赖的版本由父工程决定。 
3.具体来说是由父工程的dependencyManagement来决定。 
4.子工程没写版本号,依赖的版本为父工程中管理的依赖版本;子工程写了版本号,与父工程不一致,子工程的版本会覆盖父工程的版本 

maven你不得不玩的内容-依赖范围,传递,继承,聚合,jar包冲突..._第13张图片四 maven的聚合

4.1 聚合的概念

maven聚合层是指将多个项目组织到一个父级项目中,通过触发父工程的构建统一按顺序触发子工程的构建过程。

4.2 聚合的作用

1.统一管理子项目的构建:通过聚合,可以将多个子项目组织在一起,方便管理和维护。

2.优化构建顺序:通过聚合,可以对多个项目进行顺序控制,避免出现构建依赖混乱导致构建失败的情况。

3.以 mvn install 命令为例:Maven 要求有父工程时先安装父工程有依赖的工程时,先安装被依赖的工程。我们自己考虑这些规则会很麻烦。但是工程聚合之后,在总工程执行 mvn install 可以一键完成安装,而且会自动按照正确的顺序执行

4.3 案例

1.在父工程中pro03-maven-module中定义3个子模块,其中06依赖05,05依赖于04模块。

maven你不得不玩的内容-依赖范围,传递,继承,聚合,jar包冲突..._第14张图片

经过mvn 的compile,package,install等命令:通过父工程的触发maven命令,引发所有子模块进行构建,产生反应堆。,可以看到执行顺序为

Maven 要求有父工程时先安装父工程有依赖的工程时,先安装被依赖的工程。06先执行,然后05,然后04

maven你不得不玩的内容-依赖范围,传递,继承,聚合,jar包冲突..._第15张图片

五 jar包冲突 

5.1 使用maven helper插件 

maven helper插件,它能够给我们罗列出来同一个jar包的不同版本,以及他们的来源,但是对不同jar包中同名的类没有办法。

maven你不得不玩的内容-依赖范围,传递,继承,聚合,jar包冲突..._第16张图片

5.2 安装使用 

maven你不得不玩的内容-依赖范围,传递,继承,聚合,jar包冲突..._第17张图片 5.3 解决案例

1.依赖maven你不得不玩的内容-依赖范围,传递,继承,聚合,jar包冲突..._第18张图片

2.冲突查看 

maven你不得不玩的内容-依赖范围,传递,继承,聚合,jar包冲突..._第19张图片

maven你不得不玩的内容-依赖范围,传递,继承,聚合,jar包冲突..._第20张图片 查看pom文件

maven你不得不玩的内容-依赖范围,传递,继承,聚合,jar包冲突..._第21张图片

查看,5.2.3 aop没有冲突了!!!!

maven你不得不玩的内容-依赖范围,传递,继承,聚合,jar包冲突..._第22张图片

六 资源无法下载

6.1  maven中资源无法下载

在使用maven构建项目时,可能会发生依赖项下载错误的情况,主要原因是:

1.下载依赖时出现网络故障或仓库服务宕机等原因,导致无法连接至maven仓库,从而无法下载依赖。

2.依赖项的版本号或配置文件中的版本错误,或者依赖项没有正确的定义,导致maven下载的 依赖项羽实际需要的不一致,从而引发错误。

3.本地maven仓库或者缓存污染或损坏,导致maven无法正确的的使用现有的依赖项,并且也无法更新下载。

解决方案:

1.检查网络连接和maven仓库服务器状态

2.确保依赖项的版本号和项目对应的版本号匹配,并检查pom文件中的依赖项是否正确。

3.清除本地maven仓库缓存(lastupdate),因为只要存在lastupdated缓存文件,刷新也不会重新下载,本地仓库中,根据依赖的gav属性,依次向下查找文件夹,最终删除内部的文件,则重新下载即可。

你可能感兴趣的:(maven,maven,jar,java)