一、认识Maven
1.概述:
Maven是一个项目管理工具,提供了开发人员构建一个完整项目生命周期的框架,在多团队开发环境下,maven可以再非常短的时间内完成配置工作。
(个人感觉是一个大型环境配置软件,自动的装配环境,提供不同的场景,java项目,web项目等等都有)
功能: 简化jar包资源的使用,基于maven,根据jar包资源描述信息,自动引包
2.maven家目录结构
bin:maven运行的脚本文件
boot:启动框架 maven是使用java编写 是一个类加载器框架 相当于java里的加载器
conf:配置文件目录 配置settings文件
lib:运行时候的jar包库
3.Maven的库
(1)远程库:分为两种中央库和远程私服
- 远程库:运行保存在一个远程服务器中的maven库,可以被maven客户端连接使用(maven客户端指的是maven本身)
- 中央库:maven默认使用的远程库,由maven社区提供并维护,不能写只能读。
- 远程私服:公司本地搭建的,作为一个中介代理般的存在,一方面能上传自定义资源,一方面能够连接远程maven库。但是只能在本公司使用。
(2)本地库
如果每次maven都需要基于网络获取资源,实现下载,效率相对较低,因此maven准备了本地库,作为资源的缓冲。
如果基于网络完结maven中央库,因为外国服务器速度很慢,可以给予国内镜像,解决此问题。(阿里的,网易的等等)
4.Maven的生命周期
作为项目管理工具,负责项目的各个环节,这个过程叫做Maven的生命周期。
生命周期包含:创建 编码 编译 测试 打包 安装 发布
5.idea配置Maven环境
(1)settings配置
(2)new projects settings配置
6.pom.xml基本结构信息
modelVersion:描述pom文件是基于哪一个版本的项目描述
groupId:表示当前项目的名称(组名称)
artifactId:当前项目的功能模块名称
version:当前项目的版本
二、Maven依赖
1.dependences标签
可以管理若干个dependency标签,实现对依赖资源jar包的直接使用
2.依赖传递
一个依赖的jar包,其本质上就是一个java工程,所以在开发这个java工程的时候也会用到其他的jar包资源,在maven中,这种相互依赖的关系是可以传递。
例如:B依赖C,A依赖B。那么A也自动依赖C了
3.创建工程
(1)父类工程
若一个maven工程没有指定packaging,则其类型默认是jar ,若是父级工程则只能是pom,若是web工程则需要指定为war
(2)子类工程
pom.xml配置文件中自动出现标签,继承自父类
(3)继承的注意事项
-
dependencies 一个项目的依赖,可以被子工程继承,而且是子工程无论用到与否都会被继承过来
-
dependencyManagement
此标签只会在父级工程中实现依赖的版本管理,而子工程并不会被强制使用这些依赖,只会继承依赖管理中的版本号,给了子工程可选择的空间
子类如果想继承
总结:
父类依赖中使用dependencyManagement实现依赖的版本管理,会直接在父类中定义好依赖的版本,子类可以选择性继承依赖,不再需要指定版本号。
三、Maven聚合
意义:
当使用父子继承关系的时候,一定会存在大量的子工程,有可能多级继承,此时子工程就可以使用maven的聚合来一键实现执行所有mvn命令。聚合就是统一命令的操作
在聚合工程(其实就具备父子继承关系)只需要添加modules标签,其中配置若干module子标签指向其他子工程的路径即可
其中packaging类型也必须和继承结构一样是pom类型