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)设置环境变量

  1. 新建MAVEN_HOME系统变量:
1
MAVEN_HOME : E:\Maven\apache-maven-3.6.2
  1. 编辑PATH系统变量,添加以下内容:
1
PATH : %MAVEN_HOME%\bin

(3) 测试maven是否安装成功

1
mvn -v

3. Maven仓库

(1) Maven仓库的种类

Maven的仓库中存放工程依赖的jar包。
仓库分为:本地仓库,中央仓库,第三方仓库(私服)

  1. 本地仓库,Maven会将工程中依赖的jar包从远程下载到本机一个目录下管理,默认的本地仓库是在$user.home/.m2/repository

  2. 中央仓库:Maven官方维护的公共远程仓库:http://repo1.maven.org/maven2。里面有大量的常用类库,如果本地仓库没有工程依赖的jar包,默认从中央仓库下载。

  3. 第三方仓库(内部中心仓库,私服): 一般是由公司自己设立的,只为本公司内部共享使用。

(2) 修改本地仓库的地址

打开Maven安装目录下的conf/settings.xml文件,修改<localRepository>中的内容为本地仓库的地址

1
2
3
4
5
6
7
8
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">


<localRepository>E:\Maven\LocalRepository</localRepository>

</settings>

4. Maven scope

scope: 依赖范围,表示通过pom.xml加载进来的jar包,在什么范围内使用生效,范围包括编译时,运行时,测试时。

  1. compile: 默认值,如果选择此值,表示编译、测试和运行都使用当前jar

  2. test: 表示只在测试时当前jar生效,在别的范围内就不能使用该jar包。

  3. runtime: 表示测试和运行时使用当前jar,编译时不用该jar包。例如:JDBC驱动。因为通常在编译时没有使用到JDBC驱动包内任何东西,只有在运行时才使用。

  4. provided: 表示编译和测试时使用当前jar,运行时不在使用该jar了。例如:servlet-api、jsp-api等。

  5. system: 表示自己手动加入的jar包,不属于maven仓库(本地,第三方等),属于别的类库。只在编译和测试期生效,运行时无效。一般不用。

5. Maven解决依赖冲突

依赖调节: maven解决传递依赖时jar包冲突问题的方法。

依赖调节的两个原则:

  1. 第一原则:路径近者优先原则
1
2
A-->B-->C-->D-->X(1.6)
E-->D-->X(2.0)

使用X(2.0),因为其路径更近

  1. 第二原则:第一声明者优先原则。就是如果路径相同,maven 默认配置在前面的优先使用
1
2
A-->B--> X(1.6)
C-->D--> X(2.0)

这样就是路径相同,那么如果A在前面,C在后面,则使用X(1.6)。
maven会先根据第一原则进行选择,第一原则不成,则按第二原则处理。