目录
[一. Maven的作用](#一. Maven的作用)
[1. Maven的仓库类型](#1. Maven的仓库类型)
[2 加载jar的顺序](#2 加载jar的顺序)
[3. Maven安装配置](#3. Maven安装配置)
[1. 引入依赖【重点】](#1. 引入依赖【重点】)
[3. 使用示例](#3. 使用示例)
[4. 依赖传递](#4. 依赖传递)
[1 常见的构建命令:](#1 常见的构建命令:)
[2 构建项目](#2 构建项目)
[3. 项目构建的生命周期](#3. 项目构建的生命周期)
Maven:中文翻译是"专家"、"内行",它是Apache提供的免费开源的项目管理和构建工具。
官网:Maven -- Welcome to Apache Maven
一. Maven的作用
-
依赖管理
-
统一项目结构规范
-
构建项目
1.依赖管理
一个企业级项目通常要依赖大量的jar包,这会导致一些问题的产生,比如:
-
需要自己查找、下载、导入jar包到项目
-
jar包之间可能会产生冲突
2.统一项目结构
使用不同的IDE工具创建的项目结构是不同的,这会导致代码上也会出现差异。而maven提供了标准的、统一的项目结构,屏蔽了开发工具造成的差异。
3.项目构建
Maven提供了一套标准的、跨平台的自动化项目构建方式,它只需要通过简单的命令就能够对项目进行编译、测试、打包、安装、发布等等一系列的操作,实现一键构建项目。
无论是开发人员,还是测试、运维人员,maven都可以提供有力的工作支撑。
二.Maven安装配置
1. Maven的仓库类型
仓库类型:
根据仓库所在的位置不同,可分为:
-
本地仓库:
-
本地缓存jar包的文件夹
-
本地仓库默认在:
C:\Users\电脑的用户名\.m2\repository
-
通常会修改配置文件,修改本地仓库的路径
-
-
远程仓库(私服):
-
一些企业、组织、社区搭建的仓库服务,私服里的jar包大多数还是来自于中央仓库
-
有些是企业内部自己搭建、自己使用的;
-
-
中央仓库
-
是Maven官方团队维护的仓库,里边有最全的开源jar包。
但是没有授权的jar包,中央仓库里没有,比如:Oracle驱动包
-
2 加载jar的顺序
maven加载jar包的顺序:
-
maven只会从本地仓库里查找并加载jar包。如果本地仓库里找不到jar包,就会:
-
如果配置了远程仓库,就从远程仓库里查找jar包,下载到本地仓库
-
如果没有配置远程仓库,就从中央仓库里查找jar包,下载到本地仓库
-
-
然后maven仍然是从本地仓库中加载jar包
3. Maven安装配置
下载Maven:3.5.x或3.6.x都可以
-
各个版本的下载地址:Index of /dist/maven/maven-3
maven3.6.1下载地址:Index of /dist/maven/maven-3/3.6.1/binaries
Windows系统下载
.zip
包Mac系统下载
.tar.gz
包 -
Maven的目录结构:
|--bin Maven的可执行命令文件夹
|--boot Maven的引导程序(类加载器)
|--conf 配置文件夹
|--lib Maven的核心程序代码
4.安装Maven
注意:我们使用的maven3.5 或maven3.6版本,依赖于jdk11;过高版本的jdk,会导致maven运行出错;
1.解压Maven
Maven是免安装的,直接解压即可。但是要注意:解压路径里,不要有中文、空格、特殊字符。例如,我的maven解压到了C:/programs/apache-maven
里
2.配置Maven环境变量
增加MAVEN_HOME=Maven的解压目录
。要注意:这个解压目录必须是 里边有bin、conf等等那些文件夹
修改Path中添加 %MAVEN_HOME%\bin
3.验证Maven配置
打开cmd,输入命令:mvn -version
或 mvn -v
,如果正常输出maven版本信息,说明maven安装成功
5.配置仓库
1.配置Aliyun镜像地址
我们的maven没有私服,所以本地仓库里没有的jar包,maven会直接从中央仓库里查找下载。而中央仓库服务器在国外,速度慢且不稳定,经常会下载失败。
Aliyun提供了maven仓库镜像服务,我们把Aliyun的镜像服务地址配置给maven,就会从阿里云下载jar包,速度很快。
<mirror>
<id>aliyunmaven</id>
<mirrorOf>*</mirrorOf>
<name>阿里云公共仓库</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
2.配置本地仓库
默认情况下,maven会使用C:\Users\liuyp\.m2\repository
作为本地仓库。如果你的C盘比较小,可以自定义本地仓库的路径。
配置方式:
-
打开maven里的
conf/settings.xml
-
增加配置
<localRepository>本地仓库路径</localRepository>
三.idea集成maven
注意:在File-Settings里配置,同时在File-OtherSettings-Settings for New projects里也配置
1.给当前project集成maven
配置Maven
增加运行的参数:-DarchetypeCatalog=local
,让Maven从本地仓库加载骨架信息;选择使用JDK11
2.给新建project集成maven
上面仅仅针对当前打开的project有效。如果再新建project的话,maven仍然是未配置状态,还需要再次集成。所以这里做一下全局的maven集成,后期再创建新project时,maven也会默认生效。
在这里配置maven和Runder
3.创建maven项目
后期每次创建一个项目,全部都创建成project
创建Project
坐标:被maven管理的所有项目包括jar包,都必须一个唯一标识。这个唯一标识就是坐标
坐标由三部分组成:
-
groupId:通常是公司或组织的域名倒写。例如:com.itheima, com.jd
-
artifactId:项目名
-
version:版本号
4.pom.xml说明
XML
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!-- 当前项目的坐标 -->
<groupId>com.itheima</groupId>
<artifactId>day04-maven-project1</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- 打包方式。常用的有jar和war。如果不设置,默认是jar -->
<packaging>jar</packaging>
<!-- 项目的一些属性参数配置 -->
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
</project>
四.Maven管理依赖
1. 引入依赖【重点】
如果项目中需要使用jar包,只需要把jar包的坐标配置到项目的pom.xml中即可。在pom.xml的<dependencies>
标签里增加依赖坐标
可以使用 alt+insert
,会弹出依赖导入的界面,可以从本地仓库里搜索依赖
如果不知道依赖的坐标,可以从中央仓库搜索坐标:https://mvnrepository.com/
2.依赖范围
如果项目中引入的jar包过多,可能会出现jar包冲突 ,我们可能设置jar包不同的依赖范围来处理jar包冲突。
Maven的依赖范围有:
-
compile
:默认的依赖范围,全范围有效。 -
test
:单元测试有效。src/test里有效,src/main里无效。打包时会忽略 -
provided
:编译时有效,运行时使用其它地方提供的jar包。备胎。打包时会忽略 -
runtime
:运行时有效,编译时无效。比如:数据库驱动包 -
system
:引入仓库之外的本地jar包。少用
实际开发中特殊的jar包
-
Junit
:依赖范围通常设置为test
-
servlet-api, jsp-api
:依赖范围通常设置为provided
-
数据库驱动包
:依赖范围可以是默认的,也可以是runtime
-
其它包,绝对多数都是默认依赖范围
3. 使用示例
如果项目中要使用单元测试和logback,就添加依赖两者的依赖坐标。最终pom.xml如下:
XML
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!-- 当前项目的坐标 -->
<groupId>com.itheima</groupId>
<artifactId>day04-maven-project1</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- 项目的一些属性参数配置 -->
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<!-- 项目依赖 -->
<dependencies>
<!--单元测试的依赖。依赖范围test-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!--logback的依赖。依赖范围 默认的compile-->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.11</version>
</dependency>
</dependencies>
</project>
4. 依赖传递
1.依赖传递:
maven中添加的依赖是具有传递性的,即:项目依赖于A,而A依赖于B,maven会将A和B都帮我们导入进来。例如:刚刚我们添加了junit和logback两个坐标,而实际上导入了5个依赖。
2.依赖冲突的处理:
依赖传递可以帮我们减少pom.xml的代码量,但是也可能会造成依赖冲突。例如:
-
项目依赖于A,A依赖于X(v1版本)
-
项目依赖于B,B依赖于X(v2版本)
要想解决依赖冲突,可以使用maven的exclusions标签:
XML
<!--logback的依赖-->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.11</version>
<exclusions>
<!--排除掉 间接引用进来的slf4j-api-->
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--我们自己添加要引入的slf4j-api的坐标 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.22</version>
</dependency>
五.Maven构建项目
- 在idea里构建项目
对项目代码进行编译、测试、打包、安装、发布等等一系列的操作过程,叫构建
maven可以通过命令,实现一键构建项目
1 常见的构建命令:
-
clean:清理。把之前编译的结果(target文件夹)删除掉
-
compile:编译。编译项目内src\main里的主体代码,编译结果会放到自动生成的target文件夹里
-
test:单元测试。编译并执行src\test里的单元测试代码
-
package:打包。把编译结果制作成程序包。
如果打包方式是war,就打成war包
如果打包方式是jar,或者没有配置打包方式,就打成jar包
-
install:安装。把程序包安装到本地仓库
-
deploy:发布。把程序包发布到私服上
2 构建项目
方式一:直接点击按钮
-
在idea右侧点击
maven
,在弹出的窗口中刷新一下 -
找到要操作的项目,在
Lifecycle
中找到要执行的命令,双击即可执行
方式二:输入命令执行
3. 项目构建的生命周期
Maven的三套生命周期:
-
清理生命周期:CleanLifeCycle
有常用命令:
clean
-
默认生命周期(构建生命周期):DefaultLifeCycle
有常用命令:
compile->test->package->install->deploy
-
站点生命周期:SiteLifeCycle
有常用命令:
site
。生成Maven项目的描述信息文档
生命周期的作用:如果执行了一个目标命令:Maven会把生命周期里的命令,从第一个一直执行到目标命令为止