JavaWeb(一) Maven
本文最后更新于:2023年2月28日 下午
1. Maven概述
Maven是一个项目管理工具,将项目开发和管理过程抽象成-个项目对象模型(Project Object Model, POM)。
作用
-
项目构建
提供标准的、跨平台的自动化项目构建方式
-
依赖管理
方便快捷的管理项目依赖的资源(jar包) ,避免资源间的版本冲突问题
-
统一开发结构
提供标准的、统一的项目结构
2. Maven下载安装
Apache-Maven
下载文件夹压缩包,免去安装。

目录结构
1 | |
idea内置Maven
位于 <path>\IntelliJ IDEA 2021.3.2\plugins\maven
bin 路径 <path>\IntelliJ IDEA 2021.3.2\plugins\maven\lib\maven3\bin
全局settings.xml路径 <path>\IntelliJ IDEA 2021.3.2\plugins\maven\lib\maven3\conf·
3. Maven基本概念
Maven仓库
Maven 仓库是项目中依赖的第三方库所在的位置。

-
本地仓库
-
远程仓库
-
中央仓库
Maven社区管理,存储绝大多数流行的开源构件。联网获取,无需配置。
-
私服
部门/公司范围内)局域网内代理所有外部的远程仓库,可从中央仓库获取资源,可存储具有版权的资源。速度快、稳定,需配置。
-
其他公共库
-
Maven 依赖搜索顺序
- 从本地仓库查找构件,如果没有找到,跳到第 2 步,否则继续执行其他处理。
- 从中央仓库查找构件,如果没有找到,并且已经设置其他远程仓库,然后移动到第 4 步;如果找到,那么将构件下载到本地仓库中使用。
- 如果没有设置其他远程仓库,Maven 则会停止处理并抛出错误。
- 在远程仓库查找构件,如果找到,则会下载到本地仓库并使用,否则 Maven 停止处理并抛出错误。
Maven坐标
Maven坐标用于定位Maven仓库中资源的位置。
Maven坐标的组成
必要
-
groupid定义当前maven项目隶属的组织名称,一般是反写域名(顶级域名.公司.组织.个人.功能板块)。比如:com.alibaba.taotao
-
artifactId定义当前maven项目的名称(模块,一般为 项目名+子模块名)。比如:taobao-web
-
version定义当前maven项目当前所处版本。
非必要
-
packaging定义当前maven项目的打包方式
引入
查找资源相关信息:
进入 https://mvnrepository.com/ 搜索,复制 Maven下的配置代码。
3. Maven依赖管理
配置文件
优先级:pom.xml > 自定义settings.xml (.m2\) > 全局settings.xml (maven\conf)
settings.xml
Maven相关参数配置,如本地仓库、远程仓库的代理信息等。
如我们当前用到的本地仓库的位置、远程仓库的镜像配置:
1 | |
pom.xml
POM (Project Object Model) 代表项目对象模型,是 Maven 工程的基本工作单元包含了项目的基本信息,用于描述项目如何构建,声明项目依赖,等等。
主要配置节点如下:
1 | |
依赖配置
本地模块直接引入Maven坐标即可。
配置开源模块
查询网址:https://mvnrepository.com
搜寻依赖,粘贴代码至 pom.xml 即可完成依赖配置:
但想要使用依赖,需要先将jar包下载至本地仓库(
settings.xml中LocalRepository配置路径)
依赖传递
依赖具有传递性
Maven工程引入依赖的同时。也引入了依赖的依赖
- 直接依赖:在当前项目中通过依赖配置建立的依赖关系
- 间接依赖:被依赖的资源如果依赖其他资源,当前项目间接依赖其他资源
解决依赖冲突:
- 路径优先:当依赖中出现相同的资源时,层级越深,优先级越低,层级越浅,优先级越高
- 声明优先:当资源在相同层级被依赖时,配置顺序靠前的覆盖配置顺序靠后的
- 特殊优先:当同级配置了相同资源的不同版本,后配置的覆盖先配置的
4. Maven生命周期与插件
构建生命周期
Maven 构建生命周期定义了一个项目构建跟发布的过程。分为三个阶段,每个阶段也包含一个生命周期:
clean:项目清理的处理default / build:项目部署的处理site:项目站点文档创建的处理
clean生命周期
pre-clean:执行一些需要在clean之前完成的工作clean:移除所有上一次构建生成的文件post-clean:执行一些需要在clean之后立刻完成的工作
在一个生命周期中,运行某个阶段 (phase) 的时候,它之前的所有阶段都会被运行。
例如,执行
mvn clean时,clean和post-clean都被执行。
default生命周期
比较重要的default阶段:
validate:验证,验证项目是否正确且所有必须信息是可用的compile:编译,源代码编译test:测试,使用适当的单元测试框架(例如 JUnit)运行测试package:打包,将编译后的代码打包成可分发格式(例如jar/war)install:安装,安装打包的项目到本地仓库,以供其他项目使用deploy:部署,拷贝最终的工程包到远程仓库中

插件
每个生命周期中都包含着一系列的阶段 (phase) ,相当于 Maven 提供的统一的接口,其实现由 Maven 的插件来完成。
例如,执行
mvn clean时,clean对应的就是 Clean 生命周期中的 clean 阶段。但是clean的具体操作是由 maven-clean-plugin 来实现的。
插件的调用
一个插件能实现多个目标 (goal),可由插件网址查询。因此,想实现某个插件的指定目标时,命令行为:
1 | |

插件的配置
1 | |
web 项目中配置 war 插件。
1 | |
其中,executions 节点的 goals 用于配置插件实现的目标,phase 用于配置插件对应的生命周期阶段。
参考资料
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!