Maven是什么
Maven的本质是一个项目管理工具,将项目开发和管理过程抽象成一个对象模型(POM)
POM(Project Object Model): 项目对象模型
基础概念
仓库 : 用于存储资源,包含各种jar包
分类:
本地仓库:自己电脑上存储资源的仓库,连接远程仓库获取资源
远程仓库:非本机电脑上的仓库,为本地仓库提供资源
中央仓库:Maven团队维护,存储所有资源的仓库
私服:公司/部门范围内资源存储的仓库,从中央仓库获取资源
私服的作用:
保存具有版本的资源,包含购买或自主研发的jar
中央仓库的jar都是开源的,不能存储具有版权的资源
一定范围内共享资源,仅对内部开放,不对外共享
坐标 :maven中的坐标用于描述仓库中资源的位置
https://repo1.maven.org/maven2/
Maven坐标主要组成
GroupId:定义当前Maven项目隶属于组织名称(通常是域名反写,例如:org.mybatis)
ArtifactId: 定义当前Maven项目名称(通常是模块名称,例如CRM、SMS)
Version: 定义当前项目版本号
Packaging: 定义该项目的打包方式
https://mvnrepository.com //maven 仓库
Maven坐标的作用
使用唯一标识,唯一性定位资源位置,通过该标识可以将资源的识别与下载工作交由机器完成
Maven项目构建命令
Maven构建命令使用mvn开头,后面添加功能参数,可以一次性执行多个命令,使用空格分隔
mvn compile 编译
mvn clean 清理
mvn test 测试 //会生成测试报告 /surefire-reports 文件夹下
mvn package 打包
mvn install 安装到本地仓库
插件创建工程
创建工程
mvn archetype:generate
-DgroupId={project-packaging}
-DartifactId={project-name}
-DarchetypeArtifactId=maven-archetype-quickstart
-DinteractiveMode=false
创建java工程
mvn archetype:generate -DgroupId=com.itheima -DartifactId=java-project
-DarchetypeArtifactId=maven-archetype-quickstart -Dversion=0.0.1-snapshot
-DinteractiveMode=false
创建web工程
mvn archetype:generate -DgroupId=com.itheima -DartifactId=web-project -
DarchetypeArtifactId=maven-archetype-webapp -Dversion=0.0.1-snapshot -
DinteractiveMode=false
IDEA版
(Tomcat的启动 其他方法)
插件
依赖管理
可选依赖
指的是对外隐藏当前所依赖的资源----不透明
排除依赖
排除依赖指的是主动断开依赖的资源,被排除的资源无需指定版本
依赖范围
依赖的jar默认情况可以在任何地方使用,可以通过scope标签设定其作用范围
作用范围
主程序范围有效(main文件夹范围内)
测试程序范围有效(test文件夹范围内)
是否参与打包(package指令范围内)
生命周期与插件
Maven对项目构建的生命周期划分为3套
clean 清理工作
default 核心工作,例如编译,测试,打包,部署等
site 产生报告,发布站点等
Deploy 发布指令 (可以发布到私服上)
Clean生命周期
pre-clean 执行一些需要在clean 之前完成的工作
clean 移除所有上一次构建生成的文件
post-clean 执行一些需要在clean之后立刻完成的工作
Default生命周期
插件
Goals 目标
阶段
高级部分
聚合
作用:用来管理项目模块
配置方式 modules module
打包方式(模块的类型)
默认打成jar包
Web工程打成war包
聚合关系是pom包(重点关注聚合工程写成pom)
继承
模块依赖关系维护
作用:通过继承可以实现在子工程中沿用父工程中的配置
Maven中的基础与java中的继承相似,在子工程中配置继承关系
制作方式:
继承与聚合
作用
聚合用于快速构建项目
继承用于快速配置
相同点
聚合与继承的pom.xml文件打包方式均为pom,可以将两种关系制作到同一个pom文件中
聚合与继承均属于设计型模块,并无实际的模块内容
不同点
聚合是在当前模块中配置关系,聚合可以感知到参与聚合的模块有哪些
继承是在子模块中配置关系,父模块无法感知哪些子模块继承了父模块
父工程中
//
//
插件继承
子工程中
属性
自定义属性
内置属性
作用:使用maven内置属性,快速配置
Setting属性
作用:用于动态配置
Java系统属性
版本管理
工程版本
SNAPSHOT(快照版本)
项目开发过程中,为了方便团队合作,解决模块间相互依赖和时时更新的问题,开发者对每个模块进行构建的时候,输出的临时性版本叫做快照版本(测试阶段版本)
快照版本会随着开发的进展不断更新
RELEASE(发布版本)
项目开发进入阶段里程碑后,发布的稳定版本,这种版本的构件文件是稳定的,即便进行功能的后续开发,也不会改变当前发布版本内容
工程版本号约定
约定规范
主版本.次版本.增量版本.里程碑版本
主版本:表示项目重大架构的变更,如:spring5相较于spring4的迭代
次版本:表示有较大的功能增加和变化,或者全面系统地修复漏洞
增量版本:表示有重大漏洞的修复
里程碑版本:表名一个版本的里程碑(版本内部)。这样的版本同下一个正式版本相比,相对来说不是很稳定,有待更多的测试
资源配置
多文件维护
多环境开发配置
加载指定环境
作用
加载指定环境配置
调用格式
mvn 指令 -P 环境定义id
范例
Mvn install -P pro_env
activeByDefault 默认环境
跳过测试
方式1
方式2
方式3
包含测试 and 跳过测试
私服
分模块合作开发
私服介绍
创建仓库
私服资源上传
上传资源时提供对应的信息
保存的位置(宿主仓库)
资源文件
对应坐标
IDEA环境中资源上传与下载
上传所需资源
访问私服的用户名/密码
上传的位置(宿主地址)
下载所需资源
访问私服的用户名/密码
下载的地址(组地址)
Maven连接私服
Idea发布到私服的配置管理
Deploy 发布指令 (可以发布到私服上)
mvn deploy