Maven-构建生命周期与插件

news2024/11/28 9:23:19

一、概念和基础

Maven针对项目的构建和发布定义了一系列明确的步骤,根据作用不同这些步骤分属于不同的生命周期。Maven针对每个步骤都有对应的默认插件,Maven在构建过程中是通过调用这些插件完成整个过程的。开发者只需要通过简单的命令就可以驱动maven逐步执行生命周期中的步骤来完成项目构建。

二、生命周期

1.三种生命周期

根据作用不同,maven主要有三种构建生命周期:
1.1 clean lifecycle:主要是对项目进行清理
1.2 default lifecycle:主要是对项目进行编译、测试、打包、部署等操作
1.3 site lifecycle:主要是对项目产生报告、发布站点等

2.生命周期组成

每种构建生命周期都是有一些阶段组成,在一个生命周期中,必须逐阶段执行,但是可以指定到哪个阶段停止。
在这里插入图片描述

2.1、clean生命周期

  • pre-clean:执行一些需要在clean之前完成的工作
  • clean:移除所有上一次构建生成的文件
  • post-clean:执行一些需要在clean之后立刻完成的工作

2.2、default构建生命周期

  • validate (校验):校验项目是否正确并且所有必要的信息可以完成项目的构建过程。
  • initialize(初始化):初始化构建状态,比如设置属性值。
  • generate-sources (生成源代码):生成包含在编译阶段中的任何源代码。
  • process-sources (处理源代码):处理源代码,比如说,过滤任意值。
  • generate-resources(资源文件):生成将会包含在项目包中的资源文件。
  • process-resources(处理资源文件):复制和处理资源到目标目录,为打包阶段最好准备。
  • compile process-classes(处理类文件):处理编译生成的文件,比如说对Java class文件做字节码改善优化。
  • generate-test-sources(生成测试源代码):生成包含在编译阶段中的任何测试源代码。
  • process-test-sources(处理测试源代码):处理测试源代码,比如说,过滤任意值。
  • generate-test-resources(生成测试资源文件):为测试创建资源文件。
  • process-test- resources(处理测试资源文件):复制和处理测试资源到目标目录。
  • test-compile
  • process-test-classes(处理测试类文件):处理测试源码编译生成的文件。
  • test prepare-package(准备打包):在实际打包之前,执行任何的必要的操作为打包做准备。
  • package
  • pre-integration-test(集成测试前):在执行集成测试前进行必要的动作。比如说,搭建需要的环境。
  • integration-test(集成测试):处理和部署项目到可以运行集成测试环境中。
  • post-integration-test(集成测试后):在执行集成测试完成后进行必要的动作。比如说,清理集成测试环境。
  • verify(验证):运行任意的检直来验证项目包有效达到质量标准。
  • install
  • deploy (部署):将最终的项目包复制到远程仓库中与其他开发者和项目共享

2.3、clean生命周期

  • pre-site:执行一些需要在生成站点文档之前完成的工作
  • site:生成项目的站点文档
  • post-site:执行一些需要在生成站点文档之后完成的工作,并且为部署做准备
  • site-deploy:将生成的站点文档部署到特殊的服务器上

三、插件

Maven在一定意义上相当于一个执行Maven插件的框架,插件是真实执行相关操作的执行者。每个插件都通过pom文件关联到Maven生命周期的某个阶段(phases)并且定义需要执行的目标(goal)。Maven会在构建过程中在对应的阶段查找关联本阶段的插件,并执行插件的goal方法。

1.默认插件

Maven的实际工作都是由插件来执行的,而Maven和其他项目已经提供了一系列核心插件和拓展插件以满足项目构建。

Maven插件

2.自定义插件

如果以上插件不能满足开发者需求,开发者可以通过开发自定义插件来满足需求。
自定义插件开发

四、绑定插件goal到phase

构建生命周期简化了开发者操作,但是我们需要了解当构建项目时,如何将插件goal绑定到phase。

1.Packaging

最常用的方式是通过设置POM的节点,比如jar、war、ear和pom。如果没有配置则默认为jar。每种类型都会将maven核心插件的某个goal绑定到默认生命周期的构建phase。
在这里插入图片描述

2.Plugins

可以通过设置POM中的plugin节点,将插件goal与phase进行绑定。

  • 绑定非核心插件:可以绑定其他插件和自定义插件。
  • 绑定多个goal:可以插件的多个goal绑定到一个phase,packaging中只会将一个核心插件中的某一个goal绑定到phase。如果这里插件和packaging中插件相同,则会先执行packaging中goal、再执行plugin中配置的goal。
  • 多个插件绑定到phase:会按照plugin中插件配置的顺序执行。
<plugin>
   <groupId>com.mycompany.example</groupId>
   <artifactId>display-maven-plugin</artifactId>
   <version>1.0</version>
   <executions>
     <execution>
       <phase>process-test-resources</phase>
       <goals>
         <goal>time</goal>
       </goals>
     </execution>
   </executions>
 </plugin>

五、命令行启动

1.启动生命周期

可以通过maven命令行来驱动生命周期运行到某个阶段phase,命令格式如:mvn phase,例如:

mvn clean deploy

这个命令会执行clean生命周期中phase为clean之前的所有phase,然后执行default生命周期中phase为deploy之前的所有phase。
同时会根据goal和phase之前的绑定关系,调用对应插件的goal进行执行操作。

2.启动特定插件

如果开发了自定义插件,插件如果绑定了phase,可以通过启动生命周期执行自定义插件。如果没有进行绑定,也可以通过命令行执行自定义的插件。
命令格式如:

mvn groupId:artifactId:version:goal

总结

主要介绍了Maven的三种构建生命周期以及每种生命周期phase的组成,maven是通过插件执行具体的操作,将插件与phase进行绑定,来提高整个构建过程的拓展性。用户可以通过maven命令行来启动构建过程,寻找与phase绑定的插件并执行来完成整个构建过程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1188014.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

layui table合计 totalRow 保留4位小数\ 异步请求数据的表格 新增行之后 如何更新数据

layui table合计 totalRow 保留4位小数: 例: totalRowMethod:(column: any, dataSource: any[]) > { let total 0; dataSource.forEach((item) > { total total Number(item[column.key]); …

公益理发暖人心,爱心助老绿萝先行

为更好地关爱老年人的生活&#xff0c;为老年人带来更实在的便利&#xff0c;2023年11月8日&#xff0c;绿萝志愿服务队从老人们的实际需求出发&#xff0c;在拱辰一街二社区开展关爱空巢老人助老志愿活动。 绿萝理发师志愿者们又一次来到老人们熟悉的场地&#xff0c;为老人们…

Qt 二维码生成与识别

1.简介 QZXing是一个基于Qt框架的二维码解码库&#xff0c;它是对ZXing&#xff08;Zebra Crossing&#xff09;开源项目的一个Qt封装。ZXing是一个功能强大的开源二维码解码库&#xff0c;支持多种类型的码&#xff0c;包括QR码、DataMatrix码、Aztec码等。 QZXing提供了一个…

PTA_乙级_1011

#include<iostream> using namespace std;int main(){long long A,B,C,T;// 注意AB如果特别大是可能超过int类型最大范围所以用longlong最好// 在C中&#xff0c;int 类型的范围通常是在-2147483648到2147483647之间&#xff0c;这是32位有符号整数的范围。// 在C中&…

软件开发项目文档系列之十四如何撰写系统试运行报告

目录 1 系统试运行的平台及网络环境1.1 系统软件平台1.2 系统网络环境 2 系统概要说明2.1 系统主要模块2.2 系统权限 3 系统试运行的工作时间3.1 集中培训时间3.2 系统试运行环境搭建3.3 系统试运行阶段 4 系统试运行的用户对象和受众范围5 系统试运行对提高工作效率的作用分析…

互联网企业该如何进行风险管理

谈到风险管理&#xff0c;首先我们应该了解如何评估威胁。 威胁可以根据攻击的类型和目标来分类。STRIDE是微软开发出来对计算机安全威胁进行分类的威胁建模系统。 STRIDE代表&#xff1a; 假冒篡改抵赖信息披露拒绝服务提升权限 假冒 即试图通过使用错误的ID访问某个系…

牛客网:链表分割

一、题目 函数原型&#xff1a; ListNode* partition(ListNode* pHead, int x) 二、思路 根据题意&#xff0c;可以设置两个新的链表&#xff0c;将原链表中所有小于x的结点链接到链表1中&#xff0c;大于x的结点链接到链表2中&#xff0c;最后再将两个链表合并即可。 此题有两…

HT4344 2通道 立体声 DAC转换器的特性

HT4344 2通道 立体声 DAC转换器的特性&#xff1a; 1.支持多种音频数字输入格式, 支持24-bit字节 2.可自动检测采样频率&#xff0c;Z高192kHz 3.105dB动态范围 4.-90dB THDN 5.集成多比特位的Δ-Σ调制器 6.支持3.3V/5V单电源供电 7.具有强抗时钟抖动能力 8.内部集成输…

ssm+vue的高校学生课堂考勤系统设计与实现(有报告)。Javaee项目,ssm vue前后端分离项目。

演示视频&#xff1a; ssmvue的高校学生课堂考勤系统设计与实现&#xff08;有报告&#xff09;。Javaee项目&#xff0c;ssm vue前后端分离项目。 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转…

【违规处罚工作公示】10月30日-11月5日

10月30日至11月5日期间&#xff0c;共计对64,852个违规账号进行了封禁&#xff0c;其中57,954个账号因使用外挂被永久封禁。 若您游戏中遇到违规行为&#xff0c;建议您优先在游戏内进行举报&#xff1b; 另外您也可以在官方微信公众号【PUBG国际版】中点击“ 服务中心 - 举报…

感恩同行 | 这个火鸡节,我们一起好好过

社区收过 NebulaGraph 明信片的小伙伴&#xff0c;可能最常见到的词汇便是&#xff1a;谢谢。谢谢你的到来&#xff0c;让这个社区变得更有意思&#xff0c;更加多元。恰好&#xff0c;我们可人贴心的海外小姐姐 wenting 想给国际友人们来一个火鸡派对&#xff0c;一起过个感恩…

【小黑嵌入式系统第八课】初识PSoC Creator™开发——关于PSoC Creator下载、创建项目、单片机中的hello world(点亮一个led)

上一课&#xff1a; 【小黑嵌入式系统第七课】PSoC 5LP 开发套件&#xff08;CY8CKIT-050B &#xff09;——PSoC 5LP主芯片、I/O系统、GPIO控制LED流水灯的实现 文章目录 一、关于PSoC Creator1、PSoC Creator简介2、下载 二、创建项目三、led闪烁项目 一、关于PSoC Creator …

使用 AIGC ,ChatGPT 快速合并Excel工作薄

职场数据处理&#xff0c;数据分析汇报与统计的过程中&#xff0c;经常会遇到这样的一个问题那就是需要统计的数据源在多个文件中&#xff0c;多个工作薄中&#xff0c;如果要进行数据处理&#xff0c;汇总的时候会很不方便 例如&#xff1a; 如果要汇总6个月的数据可能就得需…

车企内部文件传输数据效率太慢?那是没找到合适的文件传输工具

在汽车行业&#xff0c;文件传输是一项不可或缺的工作。无论是内部协作还是上下游交互&#xff0c;都需要高效、安全、便捷的文件传输工具。然而&#xff0c;很多车企还在使用传统的文件传输方式&#xff0c;如邮件、U盘、FTP等&#xff0c;这些方式存在很多问题&#xff0c;比…

GPT-4 Turbo 发布 | 大模型训练的新时代:超算互联网的调度与调优

★OpenAI&#xff1b;ChatGPT;Sam Altman&#xff1b;Assistance API&#xff1b;GPT4 Turbo&#xff1b;DALL-E 3&#xff1b;多模态交互&#xff1b;算力调度&#xff1b;算力调优&#xff1b;大模型训练&#xff1b;GH200&#xff1b;snowflake&#xff1b;AGI&#xff1b;A…

嵌入式养成计划-49----ARM--计算机相关理论--ARM相关内容

一百二十三、计算机相关理论 123.1 计算机的组成 目前的计算机都还是 冯诺依曼体系 &#xff0c;也就是由&#xff1a;输入、输出、运算器、存储器、控制器&#xff0c;这个五个部分构成。输入&#xff1a;Input&#xff0c;常见的输入设备&#xff0c;比如鼠标&#xff0c;键…

【halcon】select_shape 值高宽比例选择

今天&#xff0c;发现一个小技巧分享给小伙伴们。 select_shape&#xff0c;这算子用的非常的多&#xff0c;平时我主要用来选择面积&#xff0c;位置&#xff0c;长宽等等。 今天&#xff0c;我在筛选瑕疵的时候&#xff0c;有很多细长的区域&#xff0c;不是我想要的&#…

新一日分享

本人对单片机领域感兴趣&#xff0c;已经写了34篇CSDN原创文章&#xff0c;有兴趣可以互关噢!

vxe-table表格校验失败后保持可以编辑状态

vxe-table表格校验失败后保持可以编辑状态 鼠标移出后可编辑状态消失 在edit-config设置为 autoClear: false 鼠标移出继续保持可编辑状态 <vxe-grid :edit-config"{trigger: dblclick, mode: row, showStatus: true, autoClear: false}" :edit-rules"valid…

关于AM5-DB低压备自投装置如何应用在某变电站项目的-安科瑞 蒋静

摘 要&#xff1a;随着电力需求的不断增加&#xff0c;电力系统供电可靠性要求越来越高&#xff0c;许多供电系统已具备两回或多回供电线路。备用电源自动投入装置可以有效提高供电的可靠性&#xff0c;该类装置能够在工作电源因故障断开后&#xff0c;自动且迅速地将备用电源投…