maven基础知识点详解
前言
在以前,如果要使用到第三方的jar包,我们需要自己找到要使用的jar导入到我们的项目中,随着项目的不断扩展,对第三方jar的使用使用不断增加,对第三方jar包的管理逐渐加大了项目维护的成本。同时,有些第三方依赖在网络上并不好找,自己去网络上找的话费时费力。
而maven作为当今常用的项目依赖管理工具,大大方便了我们对依赖的管理。如果你尚未接触过maven,不妨来学习一下吧。
一、maven介绍
maven本质上就是一个项目管理工具,主要功能是在项目开发阶段对java项目进行依赖管理和项目构建。
依赖管理:就是对jar包的管理,我们通过导入jar包的坐标(下面会解释什么是坐标),就相当于将仓库中的jar包导入到当前项目中。简单理解的话,就是我们通过一种唯一标识,让我们项目可以根据我们的标识自动将我们要的jar引入到项目的依赖中。
项目构建:通过简单的maven命令,可以便捷的实现我们项目从清理、编译、测试、报告、打包,部署整个过程。
二、maven的仓库类型
1. 本地仓库
就是将本地的磁盘空间作为jar包的存放位置,如果项目引用到了,优先从本地仓库下载。
2. 远程仓库
maven中央仓库(地址:http://repo2.maven.org/maven2/)
maven私服(公司局域网内的仓库,需要自己搭建)
其他公共远程仓库(例如apache提供的远程仓库,地址:http://repo.maven.apache.org/maven2/)
三、maven的常用命令
- clean:清理
- compile:编译
- test:测试
- package:打包
- install:安装
四、maven坐标书写规范
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.32</version>
</dependency>
<groupId>相当于开发组织,常见的话是公司域名颠倒,如com.jingdong
<artifactId>表示项目名称
<version>表示版本号
五、maven的依赖范围
所谓的依赖范围,就是说maven对依赖的管理范围,依赖范围从低到高分别是compile、test、provided、runtime、system。如果maven对一个jar的依赖范围只有compile的话,那么在编译的时候maven不会报错,但是在真正用到这个依赖的时候就会报错。
六、maven的依赖传递性质
在maven中,依赖是可以传递的,假设存在三个项目,分别是项目A,项目B以及项目C。假设C依赖B,B依赖A,那么我们可以根据maven项目依赖的特征不难推出项目C也依赖A。
但是依赖传递会导致依赖冲突的问题如果我引入了两个spring-webmv:4.2.4.RELEASE和spring-aop:5.0.2.RELEASE包,这两个jar包都依赖了spring-beans,但是双方依赖的版本不同,那这个时候应该使用哪一个jar包呢?
这就是依赖冲突产生的原因。
具体解决方案可见我的另一篇文章:https://www.jianshu.com/p/b6620e81f428