Maven基础
1.maven概述
maven是一款项目的管理软件
它的两个核心功能是 依赖管理 + 项目构建(一键构建)
这两个核心功能,在maven中使用pom对象去统一管理
在我们开发中,pom对象对应的是我们项目中的pom.xml配置文件
所有在整个maven项目中,pom.xml是非常核心的配置文件,我们基本就是在操作这个文件的
2.安装及配置
2.1下载
官方下载地址:http://maven.apache.org/download.cgi
也可以通过网盘下载我的
这是我使用的maven 版本为3.6.1 (Linux版的) 大小约9兆
链接:https://pan.baidu.com/s/1xAY9WsSQSEJ1aNDQOr79lw
提取码:tcat
这是我使用的maven 版本为3.6.1 (windows版的) 大小约9兆
链接:https://pan.baidu.com/s/1ACUnFpOqy1We0Ipx8A_PvQ
提取码:winm
这是我的本地仓库下载好的常用jar包,存到网盘上,下载好后解压即可使用(没会员速度会比较慢)大小约1.1G
链接:https://pan.baidu.com/s/1CmDCWaDOLqgj6zeNvGno5g
提取码:ahaa
2.2安装
maven是一个绿色软件,解压即安装,非常容易,解压完成后我们可以查看一下maven自己的一个目录结构如下
各目录结构说明:
bin:可执行程序目录,
boot:maven自身的启动加载器
conf:maven配置文件的存放目录
lib:maven运行所需库的存放目录
2.3 环境配置
maven的运行需要java的环境,能用到maven相信配置环境变量的步骤一定不陌生
2.3.1:我的电脑(右击)-------->属性--------->高级系统设置---------->新建系统变量 MAVEN_HOME,
系统变量值就是maven软件的根目录
2.3.2配置path:
找到path变量名双击进去添加下图的代码
%MAVEN_HOME%\bin
3.Maven基础概念
3.1 仓库
仓库:用于存储资源,主要是各种jar包
仓库分为本地仓库,私服,中央仓库,其中私服和中央仓库都属于远程仓库
中央仓库:maven团队自身维护的仓库,属于开源的**(必须)**
私服:各公司/部门等小范围内存储资源的仓库,私服也可以从中央仓库获取资源(可选)
本地仓库:开发者自己电脑上存储资源的仓库,也可从远程仓库获取资源**(必须)**
私服的作用:
(1)保存具有版权的资源,包含购买或自主研发的jar
(2)一定范围内共享资源,能做到仅对内不对外开放
3.2 坐标
我们说maven的仓库里存储了各种各样的资源(jar包),那这些资源我们如何找到它们呢?我们需要知道它们具体的一个位置才能知道如何找到它们,这个就叫坐标
坐标:maven中的坐标用于描述仓库中资源的位置
https://repo1.maven.org/maven2/
那maven中的坐标是如何构成的呢?
maven坐标的主要组成如下:
groupId:定义当前资源隶属组织名称(通常是域名反写,如:org.mybatis;com.itheima)
artifactId:定义当前资源的名称(通常是项目或模块名称,如:crm,sms)
version:定义当前资源的版本号
packaging:定义资源的打包方式,取值一般有如下三种
(1)jar:该资源打成jar包,默认是jar
(2)war:该资源打成war包
(3)pom:该资源是一个父资源(表明使用maven分模块管理),打包时只生成一个pom.xml不生成jar或其他包结构
如果要查询maven某一个资源的坐标,我们通常可以去maven的仓库进行查询,
https://mvnrepository.com/,在该网站中可直接搜索想要的资源,然后就能得到该资源的坐标
输入资源名称进行检索。比如tomcat
选择想要的版本号
点击就能看见坐标代码,复制就能用
maven坐标的作用:
使用唯一标识,唯一性定义资源位置,通过该标识可以将资源的识别与下载工作交由机器完成.
3.3 配置本地仓库和阿里云私服
开发者要在自己电脑上做开发,首先要做的就是配置本地仓库,默认的仓库存储位置在C盘,
在maven安装目录下的conf文件夹中的settings.xml文件可以查看,红框框住的就是仓库默认存储的路径
因为我们平时开发项目所有的资源会比较多,而且各种资源还有好多的版本,资源与资源之间还有相互依赖的这种情况,因此本地仓库保存的内容会非常的多,它的体积会很大,如果放在C盘下不太合适,因此我们可以自己来指定一个位置作为本地仓库的位置。
配置本地仓库
我们需要在maven安装目录下的conf文件夹中,修改settings.xml文件
代码编写位置在红色划线处
<localRepository>/这里输入的是自己想要将资源存储在哪的路径</localRepository>
配置阿里云镜像站点
因为我们在中国,官方网站在外国,所以在下载资源时会比较慢,而阿里有镜像网站,所以相对来说会快一些。
将此代码粘贴在settings.xml文件里的标签内
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>central</mirrorOf>
<name>Nexus aliyun</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
位置如下图所示
4.Maven项目搭建
在实际开发过程中,通常是通过第三方工具来进行项目的构建和管理,因此我们使用IDEA工具进行maven项目的搭建
4.1 IDEA工具搭建maven项目
(1)在IDEA中配置Maven
在Settings里配置maven
注意:(maven的安装路径层级不要太深[3层以内],不然可能会导致idea配置maven不成功的情况)
将此代码复制在下图位置中
-Xmx768m -Dmaven.wagon.http.ssl.insecure=true -Dmaven.wagon.http.ssl.allowall=true
4.2 创建maven工程(Java项目)
4.3 填写本项目的坐标
4.4 创建好项目后的结构
查看各目录颜色标记是否正确
注意:test文件下的所有内容,在发布时,是不打进包内的
IDEA右侧有一个maven管理界面,可点开查看相关插件
5.创建web项目
5.1创建项目,和上面创建Java项目的过程一样。
5.2创建完后,在main文件夹下创建webapp文件夹
5.3 在项目的pom.xml文件中配置打包格式
5.4 在项目的pom.xml文件中添加项目资源依赖
注意:servlet和jsp的jar包在tomcat服务器中是存在的,这里添加的依赖只是在写代码时防止编译报错,真正运行项目时,使用的是tomcat服务器中的。所以这里添加的servlet和jsp依赖必须将其scope指定为provided
代码在下面
5.5tomcat插件部署
在pom.xml中添加tomcat和jdk插件
双击执行插件中的tomcat7:run
<dependencies>
<!-- junit测试代码 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<!-- Servlet和Jsp的模板 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.3.3</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<!-- tomcat插件的模板 -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.1</version>
<configuration>
<port>80</port>
<path>/</path>
</configuration>
</plugin>
<!-- jdk编译插件的模板 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<target>1.8</target>
<source>1.8</source>
<encoding>utf-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
6、生命周期
maven是一款项目的管理软件,管理项目的整个生命周期,在这个过程中有很多指令,每个指令对应生命周期中的一个过程。
总结起来,maven的生命周期有三种:
(1)清理
clean:清理工作
pre-clean:执行一些在clean之前的工作
clean:移除上一次构建产生的所有文件
post-clean:执行一些在clean之后立刻完成的工作
(2)默认
default:核心工作,例如编译,测试,打包,部署等
(3)站点
site:产生报告,发布站点等
pre-site:执行一些在生成站点文档之前的工作
site:生成项目的站点文档
post-site:执行一些在生成站点文档之后完成的工作,为部署做准备
site-deploy:将生成的站点文档部署到特定的服务器上
7 依赖传递
当B项目中有一个依赖C,此时A项目依赖B项目,那么A项目中会同时有C的依赖,我们将这种行为称之为依赖传递
7.1、依赖冲突
在依赖传递过程中, 会有一个依赖冲突的问题,对于依赖冲突,maven的解决方案:
① 路径优先:路径层级越浅,越优先使用
② 声明优先:路径层级一致的时候,谁先声明,优先使用谁
路径优先:
声明优先:
7.2、依赖隐藏
B中有依赖C,A中有依赖B,此时A中也有依赖C – 依赖传递
如果B不希望A看到C,可以在B中设置C的optional为true-- 依赖隐藏
如果A不希望看到B中的C,可以在A中设置exclusions排除C – 依赖排除