compile:通常使用的第三方框架的 jar 包这样在项目实际运行时真正要用到的 jar 包都是以 compile 范围进行依赖的。
在 A 依赖 B,B 依赖 C 的前提下,C 是否能够传递到 A,取决于 B 依赖 C 时使用的依赖范围。
注意:排除中不需要写版本。
maven的继承是指在maven的项目中,让一个项目从另一个项目中继承配置信息的机制。继承可以让我们在多个项目中共享同一配置信息,简化项目的管理和维护工作。
在父工程中统一管理项目中依赖信息,进行统一的版本管理。
它背后的需求是:
在每一个 module 中各自维护各自的依赖信息很容易发生出入,不易统一管理。使用同一个框架内的不同 jar 包,它们应该是同一个版本,所以整个项目中使用的框架版本需要统一。
使用框架时所需要的 jar 包组合(或者说依赖信息组合)需要经过长期摸索和反复调试,最终确定一个可用组合。这个耗费很大精力总结出来的方案不应该在新的项目中重新摸索。
通过在父工程中为整个项目维护依赖信息的组合既保证了整个项目使用规范、准确的 jar 包;又能够将以往的经验沉淀下来,节约时间和精力
1.父工程:打包方式为pom,只有打包方式为 pom 的 Maven 工程能够管理其他 Maven 工程。打包方式为 pom 的 Maven 工程中不写业务代码,它是专门管理其他 Maven 工程的工程。
com.atguigu.maven
pro03-maven-parent
1.0-SNAPSHOT
pom
2.通过聚合定义,管理的子模块
3.在父工程中声明自定义属性
在需要的地方使用${}的形式来引用自定义的属性名:
4.在父工程中配置依赖的统一管理
父工程统一管理依赖信息,其中使用dependencyManagement标签配置对依赖的管理,被管理的依赖并没有真正引入到每个子工程,在子工程中还要指定依赖。
1.使用parent标签指定当前工程的父工程
2.定义子工程的坐标
如果子工程坐标中的groupId和version与父工程一致,那么可以省略
3.子工程依赖父工程定义好的依赖
1.子工程引用父工程中的依赖信息时,可以把版本号去掉。
2.把版本号去掉就表示子工程中这个依赖的版本由父工程决定。
3.具体来说是由父工程的dependencyManagement来决定。
4.子工程没写版本号,依赖的版本为父工程中管理的依赖版本;子工程写了版本号,与父工程不一致,子工程的版本会覆盖父工程的版本
maven聚合层是指将多个项目组织到一个父级项目中,通过触发父工程的构建统一按顺序触发子工程的构建过程。
1.统一管理子项目的构建:通过聚合,可以将多个子项目组织在一起,方便管理和维护。
2.优化构建顺序:通过聚合,可以对多个项目进行顺序控制,避免出现构建依赖混乱导致构建失败的情况。
3.以 mvn install 命令为例:Maven 要求有父工程时先安装父工程;有依赖的工程时,先安装被依赖的工程。我们自己考虑这些规则会很麻烦。但是工程聚合之后,在总工程执行 mvn install 可以一键完成安装,而且会自动按照正确的顺序执行。
1.在父工程中pro03-maven-module中定义3个子模块,其中06依赖05,05依赖于04模块。
经过mvn 的compile,package,install等命令:通过父工程的触发maven命令,引发所有子模块进行构建,产生反应堆。,可以看到执行顺序为
Maven 要求有父工程时先安装父工程;有依赖的工程时,先安装被依赖的工程。06先执行,然后05,然后04
maven helper插件,它能够给我们罗列出来同一个jar包的不同版本,以及他们的来源,但是对不同jar包中同名的类没有办法。
2.冲突查看
查看,5.2.3 aop没有冲突了!!!!
在使用maven构建项目时,可能会发生依赖项下载错误的情况,主要原因是:
1.下载依赖时出现网络故障或仓库服务宕机等原因,导致无法连接至maven仓库,从而无法下载依赖。
2.依赖项的版本号或配置文件中的版本错误,或者依赖项没有正确的定义,导致maven下载的 依赖项羽实际需要的不一致,从而引发错误。
3.本地maven仓库或者缓存污染或损坏,导致maven无法正确的的使用现有的依赖项,并且也无法更新下载。
解决方案:
1.检查网络连接和maven仓库服务器状态
2.确保依赖项的版本号和项目对应的版本号匹配,并检查pom文件中的依赖项是否正确。
3.清除本地maven仓库缓存(lastupdate),因为只要存在lastupdated缓存文件,刷新也不会重新下载,本地仓库中,根据依赖的gav属性,依次向下查找文件夹,最终删除内部的文件,则重新下载即可。