当前位置: 首页 > news >正文

Maven 核心概念及生命周期

一、核心概念

1、简介

Maven 是 Apache 基金会旗下的一个纯 Java 开发的开源项目。Maven 是一个项目管理工具,可以对 Java 项目进行构建、解决打包依赖等。它为开发者提供了一套完整的构建生命周期框架,开发团队很容易地就能够自动完成工程的基础构建配置,在有多个开发团队环境的情况下,Maven 能够在很短的时间内使得每项工作都按照标准进行,那是因为大部分的工程配置操作都非常简单并且可复用。

2、POM(Project Object Model,项目对象模型)

Maven 基于项目对象模型 POM(project object model)实现项目管理,POM 即一段描述信息(配置)可以用来管理项目的构建,因此每个 Maven  项目都有一个 pom.xml 文件,且可以通过继承(parent)复用其他 POM 的配置。

POM 是 Maven 工程的基本工作单元,是一个 XML 文件,包含了项目的基本信息,用于描述项目如何构建,声明项目依赖等,在执行任务或目标时,Maven 会在当前目录中查找 pom 文件,通过读取 pom 文件获取所需的配置信息,然后执行目标。

3、坐标(Coordinates)

Maven 通过唯一坐标标识一个项目或依赖,确保在仓库中准确定位资源。坐标由 5 个要素组成(前 3 个为必填):

  • groupId:组织ID,一般是反写的公司域名com.example,同一个公司的Groupld都是相同的;

  • artifactId:制器ID,一般是项目名,如 myapp,也是生成包jar/war的名;

  • version:版本号(如 1.2.3);

  • packaging:打包类型(默认 jar,可选 war、pom 等);

  • classifier:附属标识(用于区分同一版本的不同构建,如 sources 表示源码包)。

范例:

<!-- https://mvnrepository.com/artifact/com.mysql/mysql-connector-j -->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<version>8.3.0</version>
</dependency>

4、依赖(Dependency)

项目运行或构建所需的外部库(或其他模块)称为依赖。通过在 pom.xml 的 <dependencies> 标签中配置依赖的坐标,Maven 会自动从仓库(本地 / 远程)下载并引入依赖,无需手动复制 jar 包。

5、生命周期(Lifecycle)

Maven 定义了一套标准化的项目构建流程(生命周期),包含一系列有序的 “阶段(Phase)”,目的是统一不同项目的构建步骤。开发者无需关心具体操作细节,只需调用生命周期的某个阶段,Maven 会自动执行该阶段及之前的所有阶段。

6、插件(Plugin)

Maven 的核心功能由插件实现,插件是生命周期阶段的 “执行者”。每个插件包含多个 “目标(Goal)”,目标绑定到生命周期的特定阶段后,执行该阶段时会触发目标的操作。例如:maven-compiler-plugin 负责编译源代码,maven-surefire-plugin 负责运行测试用例。

二、Maven 生命周期及阶段作用

Maven 有 3 个独立的生命周期,每个生命周期包含一系列阶段,阶段按顺序执行(前一个阶段完成后才会执行下一个)。

1、Clean 生命周期(清理项目)

用于删除上一次构建生成的文件(如 target 目录),包含 3 个阶段:

  • pre-clean:清理前的准备操作(如备份文件);

  • clean:删除构建输出目录(核心清理操作);

  • post-clean:清理后的后续操作(如日志记录)。

2、Default 生命周期(核心构建流程)

最常用的生命周期,涵盖从项目初始化到部署的全流程,关键阶段及作用如下(按执行顺序):

  • validate:验证项目信息是否完整(如 POM 配置、必要文件是否存在);

  • compile:将源代码编译为字节码(class 文件),输出到 target/classes;

  • test:运行单元测试(通过 surefire 插件),不影响打包;

  • package:将编译后的代码打包为指定格式(如 jar、war),输出到 target 目录;

  • install:将打包后的文件安装到本地仓库(~/.m2/repository),供本地其他项目依赖;

  • deploy:将打包后的文件部署到远程仓库,供团队其他成员使用。

3、Site 生命周期(生成项目站点)

用于生成项目文档(如 API 文档、说明文档),包含 4 个阶段:

  • pre-site:生成站点前的准备;

  • site:生成站点文档(如 index.html);

  • post-site:生成后的优化(如检查链接);

  • site-deploy:将站点部署到服务器(如 Apache 服务器)。

三、依赖传递原则及冲突解决

依赖传递原则
Maven 依赖具有传递性:若 A 依赖 B,B 依赖 C,则 A 会间接依赖 C(C 称为 A 的 “传递依赖”)。传递时遵循以下原则:

  • 最短路径优先:直接依赖的优先级高于间接依赖。例如:A 直接依赖 C(路径长度 1);A 依赖 B,B 依赖 C(路径长度 2);则 A 最终使用直接依赖的 C。

  • 声明顺序优先:当依赖路径长度相同时,pom.xml 中先声明的依赖被优先使用。例如:A 依赖 B1 和 B2,且 B1 和 B2 都依赖 C(路径长度均为 2);则 A 会使用 B1 依赖的 C(若 B1 在 B2 之前声明)。

依赖冲突解决

依赖冲突指多个传递依赖中出现同一库的不同版本,导致类冲突或功能异常。解决方法如下:

  • 直接声明依赖:通过 “最短路径优先” 原则,在 pom.xml 中直接声明冲突依赖的目标版本,覆盖传递依赖。

  • 排除传递依赖:在依赖配置中通过 <exclusions> 排除不需要的传递依赖。

  • 锁定版本:在父 POM 或当前 POM 中用 <dependencyManagement> 统一管理依赖版本,子项目继承后无需重复声明版本,避免冲突。

http://www.dtcms.com/a/508973.html

相关文章:

  • 郑州做网站企起下载模板
  • Java 二进制及相关运算学习指南
  • 凡科做的网站怎么打不开了广州网站建设q.479185700棒
  • 电子商务网站建设课程标准wordpress板块
  • 宁波网站建设哪里有青羊网站建设
  • 可视化网站后台管理系统海口 网站建设
  • C++ vector 深度解析:从底层实现到实战优化
  • 面向边缘计算的轻量化神经网络架构设计与优化
  • 做网站编辑需要学什么为企业做出贡献的句子
  • app网站开发哪家好电商学习网站
  • 公职人员可以做公益网站吗wordpress网站不稳定
  • Linux内核架构浅谈49-Linux per-CPU页面缓存:热页与冷页的管理与调度优化
  • 无用知识研究:在trailing return type利用decltype,comma operator在对函数进行sfinae原创 [三]
  • 网站首页分类怎么做的wordpress 微博主题 twitter主题
  • 前端学习手册-ECMAScript 6 入门(十四)
  • 网站建设预付款网站设计作业多少钱
  • 怎么注册建设公司网站微信朋友圈产品推广语
  • 河北农业网站建设公司wordpress找回密码邮件
  • 老版建设银行网站做网站设计前景怎么样
  • 爱站网为什么不能用了深圳市建设网络有限公司网站
  • 2025最新可用 百度网盘不限制下载
  • 【医学影像 AI】一种用于生成逼真的3D血管的分层部件生成模型
  • 四级a做爰片免费网站首页八度空间
  • 就业选择,大厂测试还是小厂开发?
  • 哪家网站专门做折扣销售网站底部代码特效
  • 宁波企业网站开发公司和硕网站建设
  • 做神马网站快速排asp.net 网站 价格
  • 郑州高端网站建设外贸网站 有哪些
  • 通用装饰器示例
  • LangChain最详细教程(一)