依赖传递和依赖冲突
依赖传递指的是当一个模块或库 A 依赖于另一个模块或库 B,而 B 又依赖于模块或库 C,那么 A 会间接依赖于 C。这种依赖传递结构可以形成一个依赖树。当我们引入一个库或框架时,构建工具(如 Maven、Gradle)会自动解析和加载其所有的直接和间接依赖,确保这些依赖都可用
即导入依赖的同时,也会导入此依赖的依赖
依赖传递的作用
- 减少重复依赖:当多个项目依赖同一个库时,Maven 可以自动下载并且只下载一次该库。这样可以减少项目的构建时间和磁盘空间。
- 自动管理依赖: Maven 可以自动管理依赖项,使用依赖传递,简化了依赖项的管理,使项目构建更加可靠和一致。
- 确保依赖版本正确性:通过依赖传递的依赖,之间都不会存在版本兼容性问题,确实依赖的版本正确性
依赖冲突
当发现要依赖的依赖项已经完成依赖,就会终止依赖传递,避免循环依赖和重复依赖的问题
依赖冲突的解决原则
- 依赖传递链短的优先,例:
A—>B—>C—>D—>E—>X(version 0.0.1)
A—>F—>X(version 0.0.2)
则A依赖于X(version 服务器托管网0.0.2)。
- 若依赖传递链一样长,则先声明者优先
在中,路径长度相同,先声明的,会优先选择
构建管理
项目构建是指将源代码、依赖库和资源文件等转换成可执行或可部署的应用程序的过程,在这个过程中包括编译源代码、链接依赖库、打包和部署等多个步骤
主动触发场景:
- 重新编译 : 编译不充分, 部分文件没有被编译!
- 打包 : 独立部署到外部服务器软件,打包部署
- 部署本地或者私服仓库 : maven工程加入到本地或者私服仓库,供其他工程使用
命令方式构建:
语法: mvn 构建命令 构建命令….
命令 | 描述 |
---|---|
mvn clean | 清理编译或打包后的项目结构,删除target文件夹 |
mvn compile | 编译项目,生成target文件 |
mvn test | 执行测试源码 (测试) |
mvn site | 生成一个项目依赖信息的展示页面 |
mvn package | 打包项目,生成war / jar 文件 |
mvn install | 打包后上传到maven本地仓库(本地部署) |
mvn deploy | 只打包,上传到maven私服仓库(私服部署) |
注:①命令执行需要进入项目的根路径 ②部署必须是jar包形式
idea中maven工具处理
即使用idea右侧边栏上的maven工具处理
构建命令周期
构建生命周期可以理解成是一组固定构建命令的有序集合,触发周期后的命令,会自动触发周期前的命令!也是一种简化构建的思路!
在一个周期中,触发周期位于后面的命令,会自动先触发此命令前面的所有命令
清理周期:主要是对项目编译生成文件进行清理
包含命令:clean
默认周期:定义了真正构件时所需要执行的所有步骤,它是生命周期中最核心的部分
包含命令:compile – test – package – install / deploy
报告周期
包含命令:site
打包: mvn clean package 本地仓库: mvn clean install
建议在编译(compile)、打包(package)、部署(install)的命令之前,加上clean命令
关于配置插件服务器托管网
build标签:配置插件在build标签中进行
plugins标签:放在build标签中,plugins中有着多个plugin标签
plugin标签:表示一个插件,plugin中有着指定插件的gav属性
Maven继承和聚合特性
Maven工程继承
Maven继承是指在Maven的项目中,让一个项目从另一个项目中继承配置信息的机制。Maven继承可以让我们在多个项目中共享同一配置信息,简化项目的管理和维护工作
作用
在父工程中统一管理项目中的依赖信息,进行统一版本管理
继承的使用语法
父工程
- 父工程的打包方式必须是pom,所以要packaging属性设置为pom
- 将src目录删除,因为父工程用来继承配置信息,不需要业务代码,只需要pom.xml
- 父工程中在dependencies标签中导入依赖的话,其所有的子工程都会导入这些依赖
- 父工程中在dependencyManagement中导入依赖的话,子工程中不会下载这些依赖,这些依赖的版本号会被继承到子工程
com.atguigu.maven
pro03-maven-parent
1.0-SNAPSHOT
pom
mysql
mysql-connector-java
8.0.33
子工程
- 子工程创建在其父工程下,创建后,会自动生成一个parent标签,其中存放着其父工程的gav属性
- 若一个依赖在父工程中的dependencyManagement标签中导入,子工程想导入其依赖,只需要在dependencies标签内的dependency标签中的groupId和artifactId即可,版本号会自动继承父工程中dependencyManagement标签中的相应依赖的version,即gav只要写ga
- 若是子工程导入的依赖中指定了版本号,则按照子工程的版本号来,类似于Java中的重写
maven-pom-parent
com.ergou
1.0-SNAPSHOT
4.0.0
com.ergou
maven-shop-order
mysql
mysql-connector-java
Maven工程聚合
Maven聚合是指将多个项目组织到一个父级项目中,通过触发父工程的构建,统一按顺序触发子工程构建的过程
聚合的作用
- 统一管理子项目构建:通过聚合,可以将多个子项目组织在一起,方便管理和维护。
- 优化构建顺序:通过聚合,可以对多个项目进行顺序控制,避免出现构建依赖混乱导致构建失败的情况。
在父工程的pom.xml文件中,会多出一个modules标签,其中有代表着子工程的module标签,父工程聚合管理着module标签对应的子工程
maven-test-son
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net