是什么?
项目构件,管理工具,用来简单描述项目信息。
最初在Jakata Turbine项目中用来简化构建过程。当时有一些项目(有各自Ant build文件),仅有细微的差别,而JAR文件都由CVS来维护。于是希望有一种标准化的方式构建项目,一个清晰的方式定义项目的组成,一个容易的方式发布项目的信息,以及一种简单的方式在多个项目中共享JARs。
maven简单意义来说能够让我们快速简单的把项目打成jar或者war包
安装
- 下载mavn并解压
- 配置环境变量
1.新建变量 M2_HOME,值为maven解压路径
2.在path中添加 %M2_HOME%\bin
生命周期
maven简单的生命周期如下图所示
任何一步出现问题都无法继续下一步。
目录结构
javase目录结构
用maven生成一个简单的javase项目,目录结构如下图所示
main目录放的是项目主要的源码;test放的是测试代码,在src同级目录下放的是maven的配置文件prom.xml。
javase项目目录结构
生成简单的javase项目
目录结构如下:
你会发现少了放java代码的文件,需要在main文件夹下创建java文件夹,web-inf补充web.xml等
坐标
一个maven工程可以打包成jar、war、pom等形式,但是它们都是拥有上述三个坐标的。我们在项目过程中导入的jar包就是通过上述坐标值唯一确定的
所谓的坐标就是
- groupId:通常是公司网址反写,项目名
- artifactId:项目名或者模块名
- version:版本号
依赖传递
- 依赖范围
运行项目所需要的依赖包可以在prom.xml文件中配置
g,a,v就不做说明了,scope指的是依赖范围,决定依赖是否跟着你的项目一起打包
依赖范围 ——编译时依赖——测试时依赖——运行时依赖——是否打入包
compile————√——————√————————√——————√
provided————√——————√————————√——————×
test——————×——————√————————×——————×
runtime———— × ——————√————————√—————— √
system———— √ —————— √————————√——————√
-
依赖传递
意思就是当你所要运行的jar包依赖另外一个jar包时,maven会把它所依赖的jar都从仓库里面拉下来,但是只有编译时和运行时依赖是传递的。依赖传递就会产生另外一个问题,那就是依赖冲突,意思就是,当你一个包所依赖的包,在另外一个包也是依赖,并且所依赖的版本不一样。
-
依赖冲突
-
最短路径原则
当发生冲突的那个依赖包,在不同层级关系下,决定版本的是层级靠上的
-
优先声明
当发生冲突的那个包,在同一层级结构下,决定版本的是最先声明的
- 依赖排除
当你不想加载某个包的依赖包的时候可以加上exclusions标签声明
仓库
- 本地仓库:可在maven的配置文件中设置
- 远程仓库(镜像仓库):开发人员自己定制的仓库
- 中央仓库:Maven提供的仓库
依赖拉取顺序:
本地>远程>中央
**
常用命令
- mvn -archetype:模板 -DgruopId=** -DartifactId =** -Dversion=** 创建项目
- mvn compile 项目编译
- mvn test 项目测试
- mvn package 项目打包
- mvn deploy 发布项目到中央仓库
- mvn clean 清除项目目录中的生成结果