maven是apache软件基金会组织维护的一款自动化构建工具,用于java平台的项目构建和依赖管理。
一个项目构建包括我们从完成代码的编写,到编译后执行,并且启动服务器的过程。
Web工程编译过程
在实际项目中,我们需要整合第三放框架,java程序,jsp页面,静态资源,配置文件,各种jar包,,构建过程,就是我们把这个原料生产成一个可以运行的项目的过程。
构建过程的环节
其中的编译,打包,部署,测试,我们让他们自动完成,就是自动化构建。
Maven实现自动化构建的原理
如图,在项目构建过程中,我们不使用maven也可能完成一个项目。但是maven并不是可有可无的。
但是在实际开发过程中,我们在使用第三方jar包的时候,通常放进WEB-INF/lib目录下,1.节约空间 通常每次创建一个工程之后,不同工程之间存在大量冗余重复的的jar包。
使用maven之后,所有的工程在使用jar包时直接从本地仓库调用,所有jar包只有一份,节约存储空间。
2.jar包依赖关系 我们经常在引入某个jar包之后,发现项目出现问题,这是因为,某些jar包在使用的时候必须依赖于其他jar包,但是我们不可能能记住不同jar包之间的依赖关系,也不能一个一个去引入,使用maven之后,自动将jar包之间的依赖全部导入,不必了解详细的依赖关系。
3.获取合适第三方jar包 java开发过程中使用的jar包种类繁多,我们不可能在开发一个项目的时候去很多不同网站找寻某一个jar包,maven像是一个目录仓库,他把所有的jar包统一收集,我们时候的时候可以直接去maven的官网下载,不去分开去不同地方下载。
4.maven的模块依赖管理 在开发大型项目的时候,把一个项目分为多个不同模块,由不同人员管理,最终合并成完整的模块,在这个过程中,我们需要控制不同模块之间的相互调用和访问,使用maven把控下层模块可以被上层模块调用。
Maven本地默认仓库是:~\.m2\repository
Maven约定的目录结构
在开发过程中,约定>配置>编码
Pom文件
Project Object Model:项目对象模型,把java工程的相关信息封装为对象作为便于操作的模型,是maven的核心配置。
Maven坐标介绍
查找jar包时
把三个gav连接起来去仓库查找,每级目录使用/分割
依赖
依赖除了上面的三个坐标之外还有个依赖的范围(一般省略)
Compile:编译范围依赖
Test :测试范围依赖
Provided :部署范围依赖
有效性总结
依赖性的传递
我们在编写项目过程中会出现这种情况,当不同项目的依赖范围不同时候,出现不能调用的情况,这个时候修改 依赖关系可以解决
例如
依赖的排除
当我们引入A的时候,A依赖于Bmaven 自动会为我们引入B的依赖,但是不是我们自己选择的版本,可能会出现不稳定的情况,我们可以引入A的时候排除B
同一框架的版本声明
仓库
1.本地仓库 当前电脑上所有的maven工程服务
继承机制
非compile范围的依赖信息不能在依赖链中传递,所以有些工程需要单独配置。但是配置的时候修改不同的版本号很麻烦。我们可以把依赖信息提取到父工程的模块统一管理
子工程引用父工程
聚合
多个工程拆分为模块后,需要手动逐个安装到仓库后依赖才能生效,修改源码后也需要手动进行clean操作,使用聚合可以批量处理
配置i聚合