一、maven简介
1.1 maven的概念和作用
(1)什么是maven
- maven的本质是一个项目管理工具,将项目开发和管理过程抽象成一个项目对象模型(POM)
- POM(project object model):项目对象模型;
- 仓库:用于存储资源,包含各种jar包
- 仓库分类:
- 本地仓库:自己电脑上的存储资源的仓库,连接远程仓库获取资源
- 远程仓库:非本机电脑上的仓库,为本地仓库提供资源
- 中央仓库:maven团队维护,存储所有资源的仓库
- 私服:部门/公司范围内存储资源的仓库,从中央仓库获取资源
- 私服的作用:
- 保存具有版权的资源,包含购买或自主研发的jar(中央仓库中的jar都是开源的)
- 一定范围内共享资源,仅对内部开放,不对外共享。
(2)maven的作用
- 项目构建:提供标准的、跨平台的自动化项目构建方式
- 依赖管理:方便快捷的管理项目依赖的资源(jar包),避免资源间的版本冲突问题
- 统一开发结构:提供标准的、统一的项目结构
1.2 maven的下载与安装
(1)maven的下载
(2)maven的安装与环境变量的配置
- maven属于绿色软件,解压即安装
- 依赖Java,需要配置java home的环境变量(已配置)
- 设置maven自身的环境,需要配置MAVEN_HOME
- 测试环境配置结果
1.3 本地仓库与远程仓库的配置
(1)本地仓库的配置
在maven解压后的文件夹下有个conf文件夹,里面有个setting.xml文件,默认指定保存下载的资源到本地仓库是如下标签
<localRepository>${user.home}/.m2/repository</localRepository>
因此要自定义位置,如下代码
<localRepository>自定义位置</localRepository>
(2)远程仓库的配置
maven默认连接的远程仓库位置,是在setting.xml文件下的如下代码
<repositories><repository><id>唯一 标识符</id></repository></repositories>
因为直接连接中央仓库,下载的速度很慢,所以要配置aliyun镜像(要把原来的注释掉),如下:
<mirror><id>nexus-aliyun</id><mirrorOf>central</mirrorOf><name>Nexus aliyun</name><url>http://maven.aliyun.com/nexus/content/groups/public</url></mirror>
1.3 依赖管理
(1)依赖配置和依赖传递
依赖配置
- 依赖值当前项目运行所需的jar,一个项目可以设置多个依赖
- 格式如下:
<!--设置当前项目所依赖的所有jar包--><dependencies><!--设置具体的依赖--><dependency><!---依赖所属的群组(一般为公司域名倒写)--><groupId>junit</groupId><!---依赖所属项目id--><artifactId>junit</artifactId><!--依赖版本号--><version></version></dependency></dependencies>
依赖传递
- 直接依赖:在当前项目中通过依赖配置建立的依赖关系
- 间接依赖:被依赖资源的资源如果依赖其他资源,当前项目间接依赖其他的资源
- 依赖传递冲突问题
- 路径优先:当依赖中出现相同的资源时,层级越深,优先级越低,层级越浅,优先级越高;
- 声明优先:当依赖在相同层级时,配置顺序靠前的覆盖配置顺序靠后的。
- 特殊优先:当同级配置了相同的依赖是不同的版本时,后配置的覆盖先配置的。
(2)依赖的控制
可选依赖
- 可选依赖指对外隐藏当前依赖——不透明;
<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version></version><optional>true</optional></dependency>
- 可选依赖指对外隐藏当前依赖——不透明;
排除依赖
- 排除依赖指主动断开依赖,被排除的资源无需指定版本——就是不需要指定的依赖资源
<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><exclusions><exclusion><groupId>org.hamcrest</groupId><artifactId>hamcrest-core</artifactId></exclusion></exclusions></dependency>
- 排除依赖指主动断开依赖,被排除的资源无需指定版本——就是不需要指定的依赖资源
依赖范围
- 依赖的jar默认情况下可以在任何地方使用,可以通过scope标签设定作用范围
- 作用范围:
- 主要程序范围有效(main文件夹下)
- 测试程序范围有效(test文件夹下)
- 是否参与打包(package指令范围内)
| scope | 主代码 | 测试代码 | 打包 | 范例 |
| —- | —- | —- | —- | —- |
| compile(默认) | Y | Y | Y | log4j |
| test |
| Y |
| junit | | provided | Y | Y |
| servlet-api | | runtime |
|
| Y | jdbc |
依赖范围的传递性
带有依赖范围的资源在进行传递时,作用范围将受到影响 |
| compile | test | provided | runtime | | —- | —- | —- | —- | —- | | compile | compile | test | provided | runtime | | test |
|
|
|
| | provided |
|
|
|
| | runtime | runtime | test | provided | runtime |注:红色字体为直接依赖,黑色字体为间接依赖
