一.Maven概述
1.1 Maven作用
Maven是专门用于管理和构建Java项目的工具,它的主要功能
有:
提供了一套标准化的项目结构
提供了一套标准化的构建流程(编译,测试,打包,发
布......)
提供了一套依赖管理机制
标准化的项目结构:
项目结构我们都知道,每一个开发工具(IDE)都有自己不同
的项目结构,它们互相之间不通用。我再eclipse中创建的目
录,无法在idea中进行使用,这就造成了很大的不方便,如下
图:前两个是以后开发经常使用的开发工具。
而Maven提供了一套标准化的项目结构,所有的IDE使用
Maven构建的项目完全一样,所以IDE创建的Maven项目可以
通用。如下图右边就是Maven构建的项目结构
如上图所示我们开发了一套系统,代码需要进行编译、测试、
打包、发布,这些操作如果需要反复进行就显得特别麻烦,而
Maven提供了一套简单的命令来完成项目构建。
依赖管理:
依赖管理其实就是管理你项目所依赖的第三方资源(jar包、
插件)。如之前我们项目中需要使用JDBC和Druid的话,就需
要去网上下载对应的依赖包(当前之前是老师已经下载好提供
给大家了),复制到项目中,还要将jar包加入工作环境这一
系列的操作。如下图所示
而Maven使用标准的 ==坐标== 配置来管理各种依赖,只需要
简单的配置就可以完成依赖管理。
如上图右边所示就是mysql驱动包的坐标,在项目中只需要写
这段配置,其他都不需要我们担心,Maven都帮我们进行操
作了。
1.2 Maven简介
Apache Maven是一个项目管理和构建工具,它基于项目对象
模型(POM)的概念,通过一小段描述信息来管理项目的构建、
报告和文档。
1.2.1 Maven模型
项目对象模型 (Project Object Model)
依赖管理模型(Dependency)
插件(Plugin)
项目对象模型就是将我们自己抽象成一个对象模型,有自己专
属的坐标。
依赖管理模型则是使用坐标来描述当前项目依赖哪些第三方
jar包。
如我们需要编译,Maven提供了一个编译插件供我们使用,
我们需要打包,Maven就提供了一个打包插件提供我们使用
等。
1.2.2 Maven仓库
大家想想这样的场景,我们创建Maven项目,在项目中使用
坐标来指定项目的依赖,那么依赖的jar包到底存储在什么地
方呢?其实依赖jar包是存储在我们的本地仓库中。而项目运
行时从本地仓库中拿需要的依赖jar包。
本地仓库:自己计算机上的一个目录
中央仓库:由Maven团队维护的全球唯一的仓库
* 地址: https://repo1.maven.org/maven2/
远程仓库(私服):一般由公司团队搭建的私有仓库
当项目中使用坐标引入对应依赖jar包后,首先会查找本地
仓库中是否有对应的jar包:
如果有,则在项目直接引用;
如果没有,则去中央仓库中下载对应的jar包到本地仓
库。
还可以搭建远程仓库,将来jar包的查找顺序则变为:
本地仓库------远程仓库------中央仓库
二.Maven安装配置
2.1 Maven的下载
下载页面:http://maven.apache.org/download.cgi
点击archives(存档)
选择版本,然后选择binaries(二进制文件)
下载压缩包
2.2 Maven的安装
注意:maven的安装需要依赖JDK的安装,所以必须先安装完
成JDK且配置好jdk环境变量后在进行maven的安装!!
maven的安装很简单,就是直接解压文件就行了。(安装路
径避免包含中文!)
2.3 Maven的环境变量配置
右击我的电脑,选择属性
点击高级系统系统设置
点击环境变量
在系统变量区 点击新建
新建变量名为MAVEN_HOME,变量值为你的maven解压
文件的目录,设置完成后点击确定
系统变量里双击Path变量,或者单击path再点编辑
新建%MAVEN_HOME%\bin
环境变量配好之后进行测试一下
键盘win+r 弹出运行,输入cmd,点击确定
在cmd窗口中键入mvn -version后回车,如果出现下面的
版本号,及说明maven安装成功
2.4 本地仓库的配置
在一个磁盘中创建一个文件夹,取名:repository
打开maven的安装目录,选择conf文件夹中的setting.xml
文件
修改文件settings.xml
打开settings.xml文件:发现本地仓库默认的地址为当前用户
的/.m2/repository目录。
2.5 配置阿里云私服
安装好Maven时,要及时的修改Maven下载的镜像地址,最
好改为国内的下载镜像,例如阿里云中央仓库,华为云中央仓
库。
同样打开conf文件夹中的setting.xml文件,找到标签,把下
面的代码复制到标签中。
javascript
<mirror>
<id>aliyunmaven</id>
<mirrorOf>*</mirrorOf>
<name>阿里云公共仓库</name>
<url>https://maven.aliyun.com/repository/public
</url>
</mirror>
把上面代码阿里云的代码复制到setting.xml文件里面大概150行左右
2.6 配置JDK
打开setting.xml,ctrl+f,搜索/path/to/tomcat/instance
复制以下代码到红线位置,这里是用的1.8的,根据jdk版本进行修改
javascript
<!-- java1.8版本 -->
<profile>
<id>jdk-1.8</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.sour
ce>
<maven.compiler.target>1.8</maven.compiler.targ
et>
<maven.compiler.compilerVersion>1.8</maven.comp
iler.compilerVersion>
</properties>
</profile>
三.IDEA 配置 Maven
3.1 IDEA配置Maven环境
选择 IDEA中 File --> Settings
搜索 maven,每次在 IDEA 创建 Maven 项目时,按照上
述方法进行配置即可。
3.2 Maven 坐标详解
Maven 中的坐标是资源的唯一标识
使用坐标来定义项目或引入项目中需要的依赖
Maven 坐标主要组成
groupId:定义当前Maven项目隶属组织名称(通常是域
名反写,例如:com.baidu)
artifactId:定义当前Maven项目名称(通常是模块名称,
例如 product-service)
version:定义当前项目版本号
javascript
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-
java</artifactId>
<version>8.0.25</version>
</dependency>
3.3 IDEA创建Maven项目
创建模块,选择Maven,点击Next
填写模块名称,坐标信息,点击finish,创建完成
创建好的项目目录结构如下:
javascript
<?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">
<!--描述这个POM文件是遵从哪个版本的项目描述符-->
<modelVersion>4.0.0</modelVersion>
<!--当前项目的坐标-->
<groupId>com.ll</groupId>
<artifactId>maven_01</artifactId>
<version>1.0-SNAPSHOT</version>
<!--当前项目的参数-->
<properties>
<!--Maven默认使用的是JDK1.5版本-->
<!--当前项目使用jdk1.8进行开发和编译-->
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
</project>
3.4 IDEA导入Maven项目
选择右侧Maven面板,点击 + 号
选中对应项目的pom.xml文件,双击即可
如果没有Maven面板,选择
View --> Appearance --> Tool Window Bars
3.5 依赖管理
3.5.1 使用坐标引入jar包
在项目的 pom.xml 中编写 标签
在 标签中 使用 引入坐标
定义坐标的 groupId,artifactId,version
点击刷新按钮,使坐标生效
具体的坐标我们可以到如下网站进行搜索:https//mvnrepository.com/
javascript
<dependencies>
<!--mysqljar的架包-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.25</version>
</dependency>
</dependencies>
3.5.2 快捷方式导入jar包的坐标
在 pom.xml 中 按 alt + insert,选择 Dependency
在弹出的面板中搜索对应坐标,然后双击选中对应坐标
点击刷新按钮,使坐标生效
3.5.3 依赖范围
通过设置坐标的依赖范围(scope),可以设置 对应jar包的作用
范围:编译环境、测试环境、运行环境。
如下图所示给 junit 依赖通过 scope 标签指定依赖的作用范
围。 那么这个依赖就只能作用在测试环境,其他环境下不能
使用。
1.compile :作用于编译环境、测试环境、运行环境
2.test : 作用于测试环境。典型的就是Junit坐标,以后使用
Junit时,都会将scope指定为该值
3.provided :作用于编译环境、测试环境。我们后面会学习
servlet-api ,在使用它时,必须将 scope 设置为该值,不
然运行时就会报错
4.runtime : 作用于测试环境、运行环境。jdbc驱动一般将
scope 设置为该值,当然不设置也没有任何问题
注意:如果引入坐标不指定 scope标签时,默认就是 compile
值。以后大部分jar包都是使用默认值。
四.maven项目构建的生命周期
4.1 maven项目构建的生命周期
在Maven出现之前,项目构建的生命周期就已经存在,软件
开发人员每天都在对项目进行清理,编译,测试及部署。虽然
大家都在不停地做构建工作,但公司和公司间,项目和项目
间,往往使用不同的方式做类似的工作。
Maven的生命周期就是为了对所有的构建过程进行抽象和统
一。Maven从大量项目和构建工具中学习和反思,然后总结
了一套高度完美的,易扩展的生命周期。这个生命周期包含了
项目的清理,初始化,编译,测试,打包,集成测试,验证,
部署和站点生成等几乎所有构建步骤。
Maven的生命周期是抽象的,这意味着生命周期本身不做任
何实际工作,在Maven的设计中,实际任务(如源代码编
译)都交由插件来完成。
maven拥有三套相互独立的生命周期,分别是clean,default
和site。clean 生命周期的目的是清理项目 ,default 生命周
期的作用是构建项目 ,site 生命周期的目的是构建项目站点
clean生命周期
clean生命周期的目的是清理项目,它包含三个阶段:
pre-clean 执行一些清理前需要完成的工作;
clean 清理上一次构建生成的文件;
post-clean 执行一些清理后需要完成的工作;
default生命周期
default生命周期定义了真正构建项目需要执行的所有步骤,
它是所有生命周期中最核心的部分。其中的重要阶段如下:
compile :编译项目的源码,一般来说编译的是
src/main/java目录下的java文件至项目输出的主classpath
目录中;
test :使用单元测试框架运行测试,测试代码不会被打包
或部署;
package :接收编译好的代码,打包成可以发布的格式,
如jar和war;
install: 将包安装到本地仓库,供其他maven项目使用;
deploy :将最终的包复制到远程仓库,供其他开发人员或
maven项目使用;
site生命周期
site生命周期的目的是建立和发布项目站点,maven能够基于
pom文件所包含的项目信息,自动生成一个友好站点,方便
团队交流和发布项目信息。该生命周期中最重要的阶段如下:
site :生成项目站点文档;
4.2 maven生命周期相关命令
compile :编译
clean:清理
test:测试
package:打包
install:安装项目到本地仓库
五.其他
5.1 编译插件
当我们点击compile编译的时候发现maven编译的时候使用的
插件是:maven-compiler-plugin:3.1:compile (default-
compile) 。该插件默认编译的jdk版本是1.5.编译生成的.class
文件,让idea中的jdk1.8运行,1.8的jdk运行1.5编译的class
文件,会显示已过时字样。所以这里我们需要手动配置下jdk
的编译版本,使用jdk1.8.
javascript
<!--插件管理-->
<build>
<plugins>
<!--编译插件:jdk1.8-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<!-- put your configurationshere -->
<!--源码-->
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
5.2 测试插件
Maven的test指令运行测试代码存在中文乱码问题, 用这个插
件可以解决
javascript
<!--test插件-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.16</version>
<configuration>
<forkMode>once</forkMode>
<argLine>-Dfile.encoding=UTF-8</argLine>
</configuration>
</plugin>
5.3 更新依赖索引
有时候给idea配置完maven仓库信息后,在idea中依然搜索
不到仓库中的jar包。这是因为仓库中的jar包索引尚未更新到
idea中。这个时候我们就需要更新idea中maven的索引了,
具体做法如下:
打开设置----搜索maven----Repositories----选中本地仓库-----
点击Update