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

Maven 生命周期和插件

Maven 生命周期和插件

  • 1 生命周期
    • 1.1 生命周期内的阶段
      • 1.1.1 clean 生命周期 (清理)
      • 1.1.2 default 生命周期 (构建和部署)
      • 1.1.3 site 生命周期 (站点生成)
  • 2 插件

1 生命周期

Maven有三个标准生命周期:default、clean和site。每个生命周期包含多个阶段,阶段按顺序执行。当你执行 某个生命周期中的某个阶段(例如 mvn install)时,Maven 会按顺序执行该生命周期内该阶段之前的所有阶段
Maven 预定义了三个相互独立的生命周期:

  • clean: 清理项目。
  • default (或 build): 构建和部署项目(这是最核心、最常用的)。
  • site: 生成项目站点文档。

1.1 生命周期内的阶段

每个生命周期都由一系列阶段组成:

1.1.1 clean 生命周期 (清理)

  • 目的: 移除之前构建生成的文件(主要是 target 目录)。
  • 主要阶段:
    • pre-clean: 执行清理前需要完成的工作。
    • clean: 核心阶段。移除所有上一次构建生成的文件(通常是删除 target 目录)。
    • post-clean: 执行清理后需要完成的工作。
  • 常用命令: mvn clean

1.1.2 default 生命周期 (构建和部署)

  • 目的: 处理项目的构建、测试、打包、验证、安装、部署等整个过程。这是最复杂也是最重要的生命周期。
  • 主要阶段 (按顺序执行):
    • validate: 验证项目是否正确且所有必要信息可用。
    • initialize: 初始化构建状态,例如设置属性或创建目录。
    • generate-sources: 生成任何需要包含在编译中的源代码。
    • process-sources: 处理源代码,例如过滤值。
    • generate-resources: 生成包含在包中的资源文件。
    • process-resources: 复制和处理资源文件到目标目录,准备打包。
    • compile: 核心阶段。编译项目的主源代码(通常是 src/main/java 下的代码到target/classes)。
    • process-classes: 对编译生成的文件进行后处理,例如字节码增强。
    • generate-test-sources: 生成任何测试源代码。
    • process-test-sources: 处理测试源代码。
    • generate-test-resources: 生成测试资源。
    • process-test-resources: 复制和处理测试资源到测试目标目录。
    • test-compile: 核心阶段。编译项目的测试源代码(src/test/java 到 target/test-classes)。
    • process-test-classes: 对测试编译文件进行后处理。
    • test: 核心阶段。使用合适的单元测试框架(如 JUnit)运行测试。这些测试不应要求代码被打包或部署。
    • prepare-package: 在打包前执行必要的准备工作。
    • package: 核心阶段。将编译后的代码打包成可分发的格式,如 JAR, WAR, EAR, POM 等。具体格式由 元素定义。
    • pre-integration-test: 在集成测试执行前执行所需的操作(如启动环境)。
    • integration-test: 处理包并在必要时部署到集成测试可以运行的环境中。
    • post-integration-test: 执行集成测试后所需的操作(如停止环境)。
    • verify: 运行任何检查以验证包是否有效且符合质量标准。
    • install: 核心阶段。将包安装到本地 Maven 仓库(通常是 ~/.m2/repository),供本地其他项目依赖。
    • deploy: 核心阶段。在集成或发布环境中,将最终的包复制到远程 Maven 仓库,以便与其他开发者和项目共享。
  • 重要特性:
    • 当你执行 default 生命周期中的某个阶段(例如 mvn install)时,Maven 会按顺序执行该生命周期内该阶段之前的所有阶段(例如,install 会执行从 validate 到 verify 的所有阶段,然后再执行 install 本身)。
    • package 阶段创建的项目构件(JAR/WAR等)位于项目的 target 目录下。
    • install 阶段将构件复制到本地仓库。
    • deploy 阶段将构件复制到配置的远程仓库。

1.1.3 site 生命周期 (站点生成)

  • 目的: 为项目生成站点文档(报告、Javadoc 等)。
  • 主要阶段:
    • pre-site: 执行生成站点前需要完成的工作。
    • site: 核心阶段。生成项目的站点文档(通常输出到 target/site)。
    • post-site: 执行生成站点后需要完成的工作,并为站点部署做准备。
    • site-deploy: 将生成的站点文档部署到配置的 Web 服务器。
  • 常用命令: mvn site (生成站点), mvn site-deploy (部署站点)。

2 插件

  • 生命周期阶段本身不执行任何具体的任务。它们只是定义了一个点(Point)。
  • 插件目标(Plugin Goals) 被绑定到生命周期的特定阶段上。当 Maven 执行到某个阶段时,所有绑定到该阶段(以及该生命周期内该阶段之前的所有阶段)的插件目标都会被执行。正是这些插件目标完成了实际的构建工作(如编译、测试、打包等)。
  • 默认maven在各个生命周期上绑定有预设的功能
<!--插件Goal:jar-->
<!--插件绑定的生命周期阶段  generate-test-resources-->
<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-source-plugin</artifactId><version>2.2.1</version><executions><execution><goals><goal>jar</goal></goals><phase>generate-test-resources</phase></execution></executions></plugin></plugins>
</build>

执行一个命令(如 mvn install)会触发一个生命周期(这里是 default),并执行从该生命周期开始直到你指定的阶段(这里是 install)之间的所有阶段。每个阶段执行时,会运行所有绑定到该阶段(及之前阶段)的插件目标。这就是 Maven 构建过程自动化的核心机制。

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

相关文章:

  • RocketMQ是什么?
  • Day7--滑动窗口与双指针--1695. 删除子数组的最大得分,2958. 最多 K 个重复元素的最长子数组,2024. 考试的最大困扰度
  • 消息队列中的推模式与拉模式
  • C++/Java双平台表单校验实战:合法性+长度+防重复+Tab顺序四重守卫
  • 【从0开始学习Java | 第14篇】集合(上)
  • Day8--滑动窗口与双指针--1004. 最大连续1的个数 III,1658. 将 x 减到 0 的最小操作数,3641. 最长半重复子数组
  • 考问通系统测试分析报告
  • Golang 语言中的指针操作
  • Android中使用RxJava实现网络请求与缓存策略
  • 实习两个月总结
  • 通义万相Wan2.1- 阿里推出的开源视频生成大模型
  • 从哲学(业务)视角看待数据挖掘:从认知到实践的螺旋上升
  • Elasticsearch查询中的track_total_hits参数
  • 【网络安全实验报告】实验五:网络嗅探及安全性分析
  • 在阿里云 CentOS Stream 9 64位 UEFI 版上离线安装 Docker Compose
  • CentOS 7更换国内镜像源
  • CentOS 7安装OpenVASGVM指南
  • 国产!全志T113-i 双核Cortex-A7@1.2GHz 工业开发板—ARM + DSP、RISC-V核间通信开发案例
  • [数据结构] ArrayList 与 顺序表
  • OVS:ovn为什么默认选择Geneve作为二层隧道网络协议?
  • 【Day 30】Linux-Mysql数据库
  • 大数据计算引擎(三)——Elasticsearch入门
  • uart串口 day57
  • 产品经理如何提升职场学习能力?破除成长瓶颈
  • Vue+Flask 电影协同推荐可视化平台 前后端分离 大数据分析
  • Windows从零到一安装KingbaseES数据库及使用ksql工具连接全指南
  • 05.用户和组管理命令
  • 【机器学习】FPR(False Positive Rate,误报率)是什么?
  • Zephyr下ESP32S3开发环境搭建(Linux篇)
  • 深度研究系统、方法与应用的综述