文章目录
1. 概述
1.1 什么是Maven
在传统的项目管理中项目是存在很大问题的,例如jar包不统一甚至不兼容,使得项目中的jar依赖包库很混乱,又或者说对于项目工程的升级维护操作很繁琐,又或者说不同IDE下项目结构布置等问题
由此,Maven诞生了
那么,Maven到底是什么呢:
- 本质:Maven本质上是一个项目管理工具,将项目开发与管理过程抽象成了一个项目对象模型(POM)
- POM(Project Object Model) : 项目对象模型:
1.2 Maven的作用
-
项目构建:提供了标准的,跨平台的自动化项目构建方式(编译,测试,打包,发布…)
-
依赖管理机制:方便快捷的管理项目依赖的资源(jar包),避免资源间的版本冲突问题
即我们不用再一个一个jar包导入了,直接配置文件中完成依赖管理即可
当项目在pom.xml配置文件中使用坐标引入依赖jar包之后,首先会在本地仓库查找是否有对应的jar包
如果有,则直接引用
如果 没有,则从远程仓库下载对应jar包到本地仓库中再引用
如果远程仓库没有,则从中央仓库查找,下载至远程仓库,再从远程仓库下载至本地仓库
-
统一了开发结构:提供标准,统一的项目结构
1.3 Maven工程目录结构
同时与src同级的还有一个pom.xml核心配置文件
1.4 Maven下载与安装
官网直接下载压缩包,解压压缩包即安装成功
官网:http://maven.apache.org/
也可以直接打开官网的下载地址:http://maven.apache.org/download.cgi
同时建议不要安装太新版本,会与IDEA版本冲突,如果使用IDEA2021建议安装Maven3.8.1及以下
注意:
安装完Maven需要配置Maven的环境变量MAVEN_HOME
配置完在命令行窗口输入mvn测试是否安装与配置成功
配置错误截图:
配置成功截图:
1.5 Maven项目构建命令
Maven构建命令由mvn开头,后面跟功能参数,一次可以执行多个命令,命令间用空格分隔
常用命令:
其中的打包,Java工程会被打成jar包,web工程会被打成war包
1.6 Maven生命周期
-
Maven构建项目的生命周期是指一次构建过程中经历了多少个事件
-
Maven对项目构建的生命周期分为三套:
-
clean:清理工作
命令顺序:pre-clean=>clean=>post-clean
其中pre-命令指执行完成该操作前完成的工作
post-命令指执行完该操作(clean)后立刻完成的工作
-
default:核心工作,包括编译,测试,打包,安装等
命令顺序:compile=>test=>package=>install
实际上一个生命周期包含的命令远不止这些
-
site:产生报告,发布站点等(即发布项目,一般不使用Maven发布项目)
命令顺序:pre-site=>site=>post-site
-
注意:在同一生命周期内,执行后面的命令,前面的所有命令都会被自动执行
2. Maven基本概念
2.1 仓库
仓库:用于存放资源,包含各种jar包
仓库分类如图:
分类:
-
本地仓库:自己电脑上存储资源的仓库,可以连接远程仓库获取资源
-
远程仓库分为中央仓库与私服:
中央仓库:是由Maven团队维护的全球唯一的仓库,存储所有资源的仓库
仓库地址:https://repo.maven.apache.org/maven2/
私服:是在部门/公司范围内存储资源的仓库,也要从中央仓库中获取资源
示例(阿里云镜像仓库):http://maven.aliyun.com/nexus/content/groups/public
-
私服的作用:
中央仓库中的jar包都是开源的,不存放具有版权的资源,因此可以在私服存放具有版权的资源,例如购买的或者自主研发的jar包
同时可以在一定范围内共享资源,仅对内开发不对外共享
2.2 坐标
-
概念:用于描述仓库中资源的具体位置
-
组成:主要组成部分有四部分:
groupId:定义当前Maven项目隶属组织名称(通常使用域名反写,如org.mybatis)
artifactId:定义当前Maven项目名称(通常为模块名)
version:版本号
packaging:定义该项目的打包方式(主要是前面三个)
例如groupId:com.alibaba
artifactId:druid
version:1.1.12
则Maven会在远程仓库中根据这个坐标下载对于jar包至本地仓库中,在本地仓库中创建目录:com.alibaba.druid.1.1.12
并在这个目录下存放这个坐标对应的jar包
接着我们通过在pom.xml下配置以下信息即可导入驱动jar包:
<dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.12</version> </dependency>
-
作用:
是唯一标识,可以唯一定位资源位置
通过这个标识可以将资源的识别与下载工作交给计算机完成
2.3 本地仓库配置
本地仓库配置即指将Maven启动后下载的资源保存的位置
默认位置:
<localRepository>${user.home}/.m2/repository</localRepository>
默认会放在电脑登录用户名所在目录下的.m2文件夹中
我们一般在D盘中maven的安装目录里面定义一个repository文件夹,将资源保存位置设置为这个repository文件夹
在conf下的setting.xml中的localRepository标签中配置:
<localRepository>D:\maven\repository</localRepository>
2.4 远程仓库配置
远程仓库是Maven默认连接的仓库位置,为中央仓库
默认配置:
<repositories>
<repository>
<id>central</id>
<name>Central Repository</name>
<url>https://repo.maven.apache.org/maven2</url>
<layout>default</layout>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
2.5 镜像仓库配置
我们一般会将远程仓库连接为阿里巴巴的镜像仓库,下载速度会更快
在conf下的setting文件中配置阿里云镜像仓库:
<mirrors>
<!-- 配置具体的仓库下载镜像-->
<mirror>
<!-- 这个镜像的唯一标识,用于区分不同的mirror元素 -->
<id>nexus-aliyun</id>
<!-- 对哪个仓库进行镜像,即替代哪个仓库 -->
<mirrorOf>central</mirrorOf>
<!-- 镜像名称-->
<name>Nexus aliyun</name>
<!-- 镜像URL -->
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
</mirrors>
3. IDEA配置Maven
3.1 修改Maven配置
在IDEA中的设置下搜索Maven,修改Maven为本地安装的Maven,并修改配置文件与本地仓库
3.2 创建Maven项目
创建模块时选择Maven即可,创建模块时可修改坐标信息
pom.xml中有一个<packaging>标签,用于指定打包方式,默认为jar,web项目中需要打成war包
3.3 导入Maven项目
在右侧面板中的Maven点击加号,选择项目的pom.xml文件即可自动导入
如果右侧面板没有Maven:
view=>Appearance=>Tool Window Bars
同时在右侧Maven面板下的插件中可以直接点击执行编译安装打包等等命令
3.4 Maven Helper插件
安装此插件后,在Maven模块中右键下的Run Maven可以直接执行编译安装打包等等命令,同时可以进行断点调试
4. 依赖管理
4.1 导入jar包
使用依赖管理的坐标导入jar包步骤:
- 在pom.xml下编写<dependencies>标签
- 在<dependencies>中编写<dependency>标签,使用这个标签引入坐标
- 在<dependency>中定义坐标的<groupId>,<artifactId>,<version>
- 点击Maven的刷新按钮
示例:导入mysql的连接驱动jar包:
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.34</version>
</dependency>
</dependencies>
驱动jar包的坐标获取方法:
百度或者bing搜索,例如搜索mysql Maven,有一个网页会提供mysql驱动jar包在Maven中的坐标,我们可以根据下载频率选择一个jar包
下载失败没有下载到jar包产生无法解析问题的解决方法:
删除目录文件夹重新下载
自己仓库有时快速导入jar包:
alt+ins,选择依赖项,搜索需要的jar包名字
4.2 依赖范围
可以通过在<dependency>标签中的<scope>标签设置对应jar包的作用范围
作用范围有:编译环境,测试环境,运行环境等
依赖范围如图:
-
其中编译环境有效指在工程结构下的java目录下有效
-
测试环境指在test目录下有效
-
provided环境指只在编译与测试环境有效,同时servlet的jar包必须声明为这种形式,否则因为tomcat自带这个jar包,在打成war包之后会报错
-
runtime指在测试和运行环境下有效,在编译环境下无效,JDBC的驱动jar包就可以设置这种环境,因为实际上驱动Driver是在运行时才会去找的,而我们写代码时的Connection等对象都是sql包下的,等到运行的时候他们才会去找JDBC驱动jar包
显得专业一点,但是不这样子配也无所谓
-
运行环境无效的jar包在被打包时不会被打到项目的lib目录下
-
其中scope的默认值为:compile
5. Tomcat与Maven
通过在Maven中导入(内置)Tomcat可以使部署服务器速度更快
插件maven模块时选择从原型创建,选择web原型
如图:
接着将目录补充完整
再接着导入tomcat插件,使得部署项目更加便捷
步骤:
- 在pom.xml中添加Tomcat插件(alt+ins快捷键导入即可):
<!-- 项目构建用的东西 -->
<build>
<plugins>
<!-- tomcat插件-->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<!-- 修改端口号 -->
<port>8080</port>
<!-- 修改虚拟目录 -->
<path></path>
</configuration>
</plugin>
</plugins>
</build>
- 右键项目run Maven下的tomcat7:run