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 协议 ,转载请注明出处!