概念
Maven是一款跨平台的项目管理工具,服务于基于Java平台的项目构建、依赖管理和项目信息管理
功能
- Maven是一个强大的构建工具,能够自动化构建过程,从清理、编译、测试到生成报告,再到打包和部署 ;
- Maven通过一个坐标系统准确地定位每一个构件,找到任何一个Java类库,轻松解决繁杂的依赖问题;
- Maven帮助我们管理项目中各个角落的项目信息(项目描述、开发者列表、版本控制……),通过Maven生成的站点,可以获得项目文档、测试报告、分析报告、日志报告等项目信息;
- Maven提供了一个免费的中央仓库,可以找到几乎所有的流行开源类库;
- Maven对于项目目录结构、测试用例命名方式都有既定的规则,遵循规则就可以免去额外学习成本;
Maven安装目录
bin:包含mvn运行的脚本,这些脚本用来配置Java命令;
boot:包含plexus-classworlds文件,是一个类加载器框架;
conf:包含setting.xml文件,全局控制Maven行为;
lib:包含Maven运行时需要的Java类库;
Maven生命周期
生命周期包括:清理、初始化、编译、测试、打包、集成测试、验证、部署、站点生成
- clean生命周期:
-
pre-clean(执行一些清理前的工作)
clean(清理上一次构建生成的文件)
post-clean(执行一些清理后的工作) - default生命周期:
-
validate(验证)
initialize(初始化) -
generate-sources(生成来源)
process-sources(处理项目主资源文件-主要是变量替换)
generate-resources(生成资源)
process-resources(处理资源)
compile(编译)
process-classes(处理类文件) -
generate-test-sources(生成测试来源)
process-test-sources(处理项目测试资源文件-主要是变量替换)
generate-test-resources(生成测试资源)
process-test-resources(处理测试资源)
test-compile(测试编译)
process-test-classes(处理测试类文件)
test(测试) -
prepare-package(准备打包)
package(打包) -
pre-integration-test(执行集成测试前的工作)
integration-test(集成测试)
post-integration-test(执行集成测试后的工作) -
verify(检查)
install(安装)
deploy(部署) - site生命周期
- pre-site(执行生成站点前的工作)
site(生成站点)
post-site(执行生成站点后的工作)
site-deploy(发布站点)
Maven坐标
为了能自动化的解析任何一个Java构件,Maven就需要将他们唯一标识,这就是依赖管理的底层基础——坐标
一组Maven坐标是由一些元素定义的:groupId,artifactId,version,packaging,classifier
- groupId:定义当前Maven项目隶属的实际项目;
- artifactId:定义项目中的一个模块;
- version:定义当前项目版本;
- packaging:定义项目打包方式;
- classifier:定义构建输出的附属构件;
Maven仓库
获取构件
当Maven根据坐标寻找构件的时候,如果本地仓库存在此构件,则直接使用;
如果本地仓库不存在,或者需要查看是否有更新的构建版本,就回去远程仓库查找,发现构件下载到本地再使用;
仓库说明
本地仓库:用户目录下的 .m2/repository/ 路径即为本地仓库(可通过复制安装目录下settings.xml到.m2/下,修改localRepository元素即可自定义本地仓库目录地址);
中央仓库:Maven核心自带的远程仓库,包含绝大部分开源构件;
私服:
一种特殊的远程仓库,架设在局域网内的仓库服务,代理远程仓库,供局域网内的Maven用户使用;
如果私服上不存在,就从远程仓库下载,缓存在私服后,为Maven用户提供服务;
一些无法从外部仓库下载到的构件也能上传到私服供大家使用;
好处:节省外网带宽;加速Maven构建;部署第三方构件;提高稳定性;降低中央仓库负荷;
快照版本机制
构建成功的的构件部署到仓库,其他人可以不考虑该构件的构建,同时可以获得该构件的最新版本
小结
从生命周期角度,Maven帮我们管理软件的各个阶段要做的工作;
从坐标角度,Maven帮我们唯一定位了我们需要的jar包;
从仓库角度,Maven帮我们更方便容易的获取jar包;
总之,一个很好的项目管理工具