Maven是什么
-
Maven的本质是一个项目观察工具,简项目开发和管理过程抽象成一个项目对象模型(POM)
-
POM(Project Object Model):项目对象模型
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RhwMlnG1-1636700046383)(https://gitee.com/code-once/ImgCloud/raw/master/img/202111101511567.png)]
Maven作用
- 项目构建:提供标准的、跨平台的自动化项目构建方式
- 依赖管理:分辨快捷的管理项目依赖的资源(jar包),避免资源间的版本冲突问题
- 统一开发结构:提供标准的项目结构
2.Maven安装配置
Maven下载
-
官网:https://maven.apache.org/
-
下载地址:https://maven.apache.org/download.cgi#
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Vp5FmmFu-1636700046386)(https://gitee.com/code-once/ImgCloud/raw/master/img/202111101533880.png)]
-
Maven解压即安装(避免存在于中文路径)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Vkp06Qts-1636700046388)(https://gitee.com/code-once/ImgCloud/raw/master/img/202111101533166.png)]
Maven设置 setting.xml文件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vqURXl9p-1636700046390)(https://gitee.com/code-once/ImgCloud/raw/master/img/202111101553506.png)]
配置本地仓库
Maven启动后会自动保存下载的资源到本地仓库
- 我们需要自定义本地仓库的位置,方便jar管理
- 在任意位置建一个名为**Repository**的文件夹
- 在**
**标签内添加自己的本地位置路径
D:DevEnvironmentRepository
远程仓库配置
Maven默认连接的是国外的服务器,下载资源的时候就会非常慢甚至会失败,所以我们需要配置国内的资源镜像
- 添加
标签下 ,添加国内镜像源,使用阿里云镜像即可
alimaven central aliyun maven http://maven.aliyun.com/nexus/content/groups/public/
Maven环境变量配置
-
依赖Java,需要配置 JAVA_HOME ( 需要安装JDK)
-
设置MAVEN自身的运行环境,需要配置 MAVEN_HOME
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aqt71E4e-1636700046392)(https://gitee.com/code-once/ImgCloud/raw/master/img/202111101542758.png)]
-
添加Path变量
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ygckhVod-1636700046394)(https://gitee.com/code-once/ImgCloud/raw/master/img/202111101543842.png)]
-
安装成功
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-crATFrEU-1636700046395)(https://gitee.com/code-once/ImgCloud/raw/master/img/202111101545049.png)]
3.Maven基础概念
仓库
- 仓库:用于存储资源,包含各种jar包
- 仓库分类:
- 本地仓库:自己电脑上存储资源的仓库,连接远程仓库获取资源
- 远程仓库:分本机电脑上的仓库,为本地仓库提供资源
- 中央仓库:Maven团队维护,存储所有的资源的仓库
- 私服:部门/公司分范围内储资源的仓库,从中央仓库获取资源
- 私服的作用:
- 保护具有版权的资源,包含购买或自主研发的jar
- 中央仓库中的jar都是开源的,不能存储具有版权的资源
- 一定范围内共享资源,仅对内部开放,不能对外共享
- 保护具有版权的资源,包含购买或自主研发的jar
坐标
-
什么是坐标?
- Maven中的坐标用于描述仓库中资源的位置
- https://repo1.maven.org/maven2/
-
Maven坐标的主要组成
- groupld:定义当前Maven项目隶属组织名词给(通常是域名反写,例如:org.mybatis)
- artifactld:定义当前Maven项目名称(通常是模块名称,例如CRM、SMS)
- version:定义当前项目版本号
- packageing:定义该项目的打包方式
- https://mvnrepository.com/
-
Maven坐标的作用
使用唯一标识,唯一性定位资源位置,通过该标识可以将资源的识别与下载工具交由机器完成
Maven坐标 例如:
org.junit.jupiter junit-jupiter-api 5.8.1 test
全局setting与用户setting区别
- 全局setting定义了当前计算机中Maven的公共配置
- 用户setting定义了当前用户的配置
- 可以在本地仓库上一级路径下在添加一个setting.xml文件
4.Maven项目(手动)
Maven项目目录结构
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Xq04ZhGe-1636700046396)(https://gitee.com/code-once/ImgCloud/raw/master/img/202111111159179.png)]
pom.xml Maven配置文件
4.0.0 8 8 org.example Maven_Project 1.0-SNAPSHOT junit junit 4.13.2 test
Maven项目构建命令
Maven构建DOS命令使用mvn开头,后面添加功能参数,可以一次执行多个命令,使用空格分隔
| 命令 | 作用 |
|---|---|
| mvn compile | 编译 |
| mvn clean | 清理 |
| mvn test | 测试 |
| mvn package | 打包 |
| mvn install | 安装到本地 |
插件创建工程
-
创建工程
mvn archetype:generate -DgroupId={project-packaging} -DartifactId={project-name} -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false -
创建java工程
mvn archetype:generate -DgroupId=com.demo -DartifactId=java-project -DarchetypeArtifactId=maven-archetype-quickstart -Dversion=0.0.1-snapshot -DinteractiveMode=false -
创建web工程
mvn archetype:generate -DgroupId=com.demo -DartifactId=web-project -DarchetypeArtifactId=maven-archetype-webapp -Dversion=0.0.1-snapshot -DinteractiveMode=false
5.Maven项目(IDEA)
注意:
- 创建项目后,如缺少测试资源文件夹,可以手动创建,右键标记为测试资源
- 加载资源缓慢要检查配置国内镜像源
- 使用原型生成项目后多余的代码可以清理
配置Maven
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HRfcrknn-1636700046398)(https://gitee.com/code-once/ImgCloud/raw/master/img/202111111207946.png)]
手工创建Java项目
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VrzOeoTe-1636700046399)(https://gitee.com/code-once/ImgCloud/raw/master/img/202111111425244.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GOZBYLWV-1636700046400)(https://gitee.com/code-once/ImgCloud/raw/master/img/202111111440901.png)]
原型创建Java项目
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cr4PSqC2-1636700046402)(https://gitee.com/code-once/ImgCloud/raw/master/img/202111111429638.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HqTKDGML-1636700046403)(https://gitee.com/code-once/ImgCloud/raw/master/img/202111111505722.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LwCRjUNT-1636700046405)(https://gitee.com/code-once/ImgCloud/raw/master/img/202111111507127.png)]
原型创建Web项目
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ar2lyaUR-1636700046406)(https://gitee.com/code-once/ImgCloud/raw/master/img/202111111537187.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MTdFfoQP-1636700046408)(https://gitee.com/code-once/ImgCloud/raw/master/img/202111111537494.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mWSAAzyK-1636700046409)(https://gitee.com/code-once/ImgCloud/raw/master/img/202111111535393.png)]
插件
例如:安装TomCat插件
-
搭建基础Web项目环境
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pVxPek5h-1636700046410)(https://gitee.com/code-once/ImgCloud/raw/master/img/202111111555899.png)]
-
在 pom.xml 文件中导入TomCat插件
org.apache.tomcat.maven tomcat7-maven-plugin 2.2 -
导入成功后可以在Maven插件项中看到该插件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-10W6ZqzX-1636700046412)(https://gitee.com/code-once/ImgCloud/raw/master/img/202111111604752.png)]
-
运行项目
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jPz8TfVD-1636700046413)(https://gitee.com/code-once/ImgCloud/raw/master/img/202111111603512.png)]
-
可以进一步设置插件
org.apache.tomcat.maven tomcat7-maven-plugin 2.2 80 / -
还可以配置Maven运行配置
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7myQQa12-1636700046414)(https://gitee.com/code-once/ImgCloud/raw/master/img/202111111608333.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FNdh3jgv-1636700046416)(https://gitee.com/code-once/ImgCloud/raw/master/img/202111111611340.png)]
pom.xml 配置文件解析
4.0.0 war org.example Project_Web 1.0-SNAPSHOT junit junit 4.13.2 test org.apache.tomcat.maven tomcat7-maven-plugin 2.2 80 /
6.项目依赖管理
依赖导入
-
依赖指当前项目运行所需的jar,一个项目可以设置多个依赖
-
格式:
junit junit 4.13.2 test -
依赖查找
Maven仓库: https://mvnrepository.com/
依赖传递
一个Maven项目可以把其他工程作为依赖导入
将项目的坐标作为依赖导入,就可以使用其依赖
org.example Maven-02-Demo 1.0-SNAPSHOT
图解:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zOacQPgj-1636700046417)(https://gitee.com/code-once/ImgCloud/raw/master/img/202111111639952.png)]
依赖传递性
-
依赖具有传递性
- 直接依赖:在当前项目中通过依赖配置建立的依赖关系
- 间接依赖:被资源的资源如果依赖其他资源,当前项目间接依赖其他资源
- 依赖具有相对性
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sljNI2Ul-1636700046418)(https://gitee.com/code-once/ImgCloud/raw/master/img/202111111643930.png)]
依赖传递冲突问题
- **路径优先:**当依赖中出现相同的资源时,层级越深,优先级越低,层级越浅,优先级越高
- **声明优先:**但资源在相同层级被依赖时,配置顺序考前的覆盖依赖顺序靠后的
- **特殊优先:**当同级配置了相同资源的不同版本,后配置的覆盖先配置的
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Vk5kIvnu-1636700046420)(https://gitee.com/code-once/ImgCloud/raw/master/img/202111111647308.png)]
可选依赖
可选依赖指对外隐藏当前所依赖的资源——不透明
可选依赖是不对外公开依赖
junit junit 4.13.2 true
排除依赖
排除依赖指主动断开依赖的资源,被排除的资源无需指定版本——不需要
排除依赖是主动断开
org.example Maven-01-Demo 1.0-SNAPSHOT junit junit
依赖范围
-
依赖的jar默认情况可以在任何地方使用,可以通过scope标签设定其作用域范围
-
作用域范围定义
- 主程序范围有效(main文件夹范围内)
- 测试程序范围有效(test文件夹范围内)
- 是否参与打包(package指令范围内)
-
作用域范围
scope 主代码 测试代码 打包 范例 compile(默认) ✔️ ✔️ ✔️ log4j test ✔️ junit provided ✔️ ✔️ servlet-api runtime ✔️ jdbc -
带有依赖范围的资源在进行传递时,作用范围将受到影响
compile test provided runtime compile compile test provided runtime test provided runtime compile test provided runtime
7.生命周期与插件
项目构建生命周期
- Maven对项目构建的生命周期划分为3套
- dean:清理工作
- default:核心工作,例如编译,测试,打包,部署等
- site:产生报告,发布站点
| clean生命周期 | |
|---|---|
| pre-clean | 执行一些需要在clean之前完成的工作 |
| clean | 一处所有上一次构建生成的文件 |
| post-clean | 执行一些需要在clean之后立即完成的工作 |
| default构建生命周期 | |
|---|---|
| compile(编译) | 编译项目的源代码 |
| test-compile(编译测试源码) | 编译测试源代码到测试目标目录 |
| test(测试) | 使用合适的单元测试框架测试框架运行测试(Juint是其中之一) |
| package(打包) | 将编译后的代码打包成可发布格式的文件,比如JAR、WAR或EAR文件 |
| install(安装) | 安装项目包到本地仓库,这样项目包可以用作其他本地项目的依赖 |
| site构建生命周期 | |
|---|---|
| pre-site | 执行一些需要在生成站点文档之前完成的工作 |
| site | 生成项目的站点文档 |
| post-site | 执行一些需要在生成站点文档之后完成的工作,并且为部署做准备 |
| site-deploy | 将生成的站点文档部署到特点的服务器 |
插件
- 插件与生命周期内的阶段绑定,在执行到对应生命周期时执行对应的插件功能
- 默认maven在各个生命周期上绑定有预设的功能
- 通过插件可以自定义其他功能
例如:
org.apache.maven.plugins maven-source-plugin 3.2.1 jar generate-test-resources
ins>
org.apache.maven.plugins
maven-source-plugin
3.2.1
jar
generate-test-resources
---------------- -------------- **codeonce**



