1.Maven基础
1. Maven
创建一个项目需要大量的依赖jar包,Maven可以帮助我们管理这些依赖jar包。
2. Maven的安装
(1) 下载Maven包,并解压
https://www-eu.apache.org/dist/maven/maven-3/3.6.2/binaries/apache-maven-3.6.2-bin.zip
(2)设置环境变量
- 新建MAVEN_HOME系统变量:
1 | MAVEN_HOME : E:\Maven\apache-maven-3.6.2 |
- 编辑PATH系统变量,添加以下内容:
1 | PATH : %MAVEN_HOME%\bin |
(3) 测试maven是否安装成功
1 | mvn -v |
3. Maven仓库
(1) Maven仓库的种类
Maven的仓库中存放工程依赖的jar包。
仓库分为:本地仓库,中央仓库,第三方仓库(私服)
本地仓库,Maven会将工程中依赖的jar包从远程下载到本机一个目录下管理,默认的本地仓库是在
$user.home/.m2/repository
。中央仓库:Maven官方维护的公共远程仓库:http://repo1.maven.org/maven2。里面有大量的常用类库,如果本地仓库没有工程依赖的jar包,默认从中央仓库下载。
第三方仓库(内部中心仓库,私服): 一般是由公司自己设立的,只为本公司内部共享使用。
(2) 修改本地仓库的地址
打开Maven安装目录下的conf/settings.xml
文件,修改<localRepository>
中的内容为本地仓库的地址
1 | <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" |
4. Maven scope
scope: 依赖范围,表示通过pom.xml加载进来的jar包,在什么范围内使用生效,范围包括编译时,运行时,测试时。
compile: 默认值,如果选择此值,表示编译、测试和运行都使用当前jar
test: 表示只在测试时当前jar生效,在别的范围内就不能使用该jar包。
runtime: 表示测试和运行时使用当前jar,编译时不用该jar包。例如:JDBC驱动。因为通常在编译时没有使用到JDBC驱动包内任何东西,只有在运行时才使用。
provided: 表示编译和测试时使用当前jar,运行时不在使用该jar了。例如:servlet-api、jsp-api等。
system: 表示自己手动加入的jar包,不属于maven仓库(本地,第三方等),属于别的类库。只在编译和测试期生效,运行时无效。一般不用。
5. Maven解决依赖冲突
依赖调节: maven解决传递依赖时jar包冲突问题的方法。
依赖调节的两个原则:
- 第一原则:路径近者优先原则
1 | A-->B-->C-->D-->X(1.6) |
使用X(2.0),因为其路径更近
- 第二原则:第一声明者优先原则。就是如果路径相同,maven 默认配置在前面的优先使用
1 | A-->B--> X(1.6) |
这样就是路径相同,那么如果A在前面,C在后面,则使用X(1.6)。
maven会先根据第一原则进行选择,第一原则不成,则按第二原则处理。