一.需求
1.maven将jar包保存到本地,不同项目都指向了rp目录下所需要的的jar包
2.减少了寻找jar包的时间,通过gav,从远程仓库下载
3.maven可以自动导入依赖的jar包
4.maven可以拆分项目,原来都是通过package进行划分。有了maven就可以将项目划分成多个模块,模块间通过在pom文件中引入需要的模块的jar,来互相调用
二.maven是一个自动化的构建工具
构建过程包含:
1.清理
2.编译
3.测试
4.报告
5.打包
6.安装
7部署
maven的自动化构建就是自动的从构建过程的起点执行到结束。
三.maven项目的目录结构
1.根目录
2.src
3.pom文件
4.main
5.test
6.java
7.resource
maven项目需要遵守一定的目录结构规范,因为项目使用maven构建,maven需要知道项目的结构。
四.常用maven命令
1.mvn clean
2.mvn test-compile
3.mvn compile
4.mvn install
5.mvn package
6.mvn deploy
maven核心程序中只定义了抽象的生命周期,但是具体的工作需要由特定的插件来完成。
五.pom文件
pom文件定义maven相关的一切设置
gav
groupid:公司域名跟项目名
artifactid:模块名
version:版本
仓库搜索过程:本地仓库,中央仓库,远程仓库
私服,远程仓库镜像(中央仓库的复制版)
仓库中的内容:1.maven自身的插件 2.第三方jar包(第一方是jdk,第二方是自己) 3.自身项目的jar包
六.jar包依赖的范围
1.compile
对主程序有效
对测试程序有效
参与打包
2.test
对主程序无效
对测试程序有效
不参与打包
3.provided
对主程序有效
对测试程序有效
不参与打包
不参与部署
example:servlet-api.jar
七.Maven的生命周期
不论要执行生命周期中的哪个阶段,都要从头开始
八.jar包冲突
由于maven的依赖传递,当我们需要A的依赖的时候,就会在pom.xml中引入A的jar包;而引入的A的jar包中可能又依赖B的jar包,这样Maven在解析pom.xml的时候,会依次将A、B 的jar包全部都引入进来。
maven默认的策略
1.路径最短
2.新声明
九.依赖传递
非compile范围的依赖不能传递
exclusion排除不需要的依赖
10.统一版本号
在properties中定义统一版本号
11.Maven的继承
创建一个maven工程为父工程,<dependencyManagement>配置依赖的统一管理,打包方式为pom
在子工程中加上对父工程的引用
子工程中不需要添加父工程中已有依赖的版本号
<parent>
<artifactId>geek</artifactId>
<groupId>org.wzp</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
12.Maven的聚合
在父工程中指明参与的模块
<modules>
<module>LearnDubbo</module>
<module>LearnJdk</module>
<module>LearnSpring</module>
<module>LearnGson</module>
</modules>