Maven-构建生命周期与插件

一、概念和基础

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.mzph.cn/news/136658.shtml

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

相关文章

若依分离版——使用Knife4j 自动生成接口文档

背景&#xff1a; 前后端分离程序&#xff0c;如果需要前端开发人员和后端开发人员配合开发&#xff0c;则需要将接口文档并显性给前端人员 解决办法&#xff1a; 使用knife4j替代若依自带的swagger&#xff0c;因为knife4j是在swagger基础上包装的&#xff0c;Knife4j不仅具…

nodejs+vue+python+PHP+微信小程序南七街道志愿者服务平台的设计与实现-计算机毕业设计推荐

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性&#xff1a;…

键盘win键无法使用,win+r不生效、win键没反应、Windows键失灵解决方案(亲测可以解决)

最近几天发现自己笔记本的win键无法使用&#xff0c;win失灵了&#xff0c;但是外接键盘后则正常:。 这个问题困扰了我一周&#xff0c;我都以为自己的枪神坏了。 寻找了几个解决方法&#xff0c;网上看了好多好多稀里糊涂的办法&#xff0c;都是不管用的&#xff0c;这里给大…

RAW图像处理软件Capture One 23 Enterprise mac中文版功能特点

Capture One 23 Enterprise mac是一款专业的图像处理软件&#xff0c;旨在为企业用户提供高效、快速和灵活的工作流程。 Capture One 23 Enterprise mac软件的特点和功能 强大的图像编辑工具&#xff1a;Capture One 23 Enterprise提供了一系列强大的图像编辑工具&#xff0c;…

卡尔曼滤波EKF

目录 一、概述 二、卡尔曼滤波的5个公式 三、应用案例&#xff1a;汽车运动 四、应用案例&#xff1a;温度估计 五、总结 一、概述 初学者对于卡尔曼滤波5个公式有点懵&#xff0c;本文先接地气地介绍5个公式&#xff0c;然后举两个常用例子加强理解&#xff0c;同时附有M…

阿里云服务器密码在哪查看?如何设置修改初始密码?

阿里云服务器创建后没有默认初始密码&#xff0c;需要用户通过重置实例密码的方式来设置新的密码&#xff0c;阿里云服务器网aliyunfuwuqi.com分享阿里云服务器ECS重置实例密码的详细操作流程&#xff1a; 阿里云服务器重置密码方法 1、登录到阿里云服务器管理控制台 2、左侧…

STM32-EXTI中断

EXTI简介 EXTI&#xff08;Extern Interrupt&#xff09;外部中断 EXTI可以监测指定GPIO口的电平信号&#xff0c;当其指定的GPIO口产生电平变化时&#xff0c;EXTI将立即向NVIC发出中断申请&#xff0c;经过NVIC裁决后即可中断CPU主程序&#xff0c;使CPU执行EXTI对应的中断程…

【Leetcode】202. 两数之和

给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一个元素在答案里不能重复出现。 你可以按任意顺序返回…

判断sparse matrix是否是对称矩阵

参考&#xff1a; https://stackoverflow.com/questions/48798893/error-in-checking-symmetric-sparse-matrix import scipy.sparse as sp import numpy as np np.random.seed(1)a sp.random(5, 5, density0.5)a结果如下 sym_err a - a.T sym_check_res np.all(np.abs(s…

制作一个用户登录界面

Flask-WTF扩展使用Python类来表示web表单。表单类只是将表单的字段定义为类变量。 再次考虑到分离的问题&#xff0c;我将使用一个新的app/forms.py模块来存储我的web表单类。首先&#xff0c;让我们定义一个用户登录表单&#xff0c;它要求用户输入用户名和密码。表单还将包括…

Vue3 + Vite + Ts + Router搭建项目

1、新建文件夹 从新建的文件夹cmd进入终端 2、安装vite—依据vite创建vue3项目 2.1、运行 npm init vitelatest2.2.1、输入项目名称 2.2.2、选择vue 2.2.3、选择TypeScript语言 3、安装依赖项 3.1、进入刚才创建的文件夹 cd vite-project 3.2、查看镜像 #查看当前源 npm con…

mac M2 pytorch_geometric安装

我目前的环境是mac M2&#xff0c;我在base环境中安装了pytorch_geometric,仅仅做测试用的&#xff0c;不做真正跑代码的测试 首先我的base环境的设置如下&#xff1a; pip install pyg_lib torch_scatter torch_sparse torch_cluster torch_spline_conv -f https://data.pyg.…

创建多层级行索引,创建多层级行索引的DataFrameMultiIndex.from_product()

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 创建多层级行索引, 创建多层级行索引的DataFrame MultiIndex.from_product() [太阳]选择题 使用pd.MultiIndex.from_product()&#xff0c;下列输出正确的是&#xff1a; import pandas as pd…

【React入门实战】实现Todo代办

文章目录 效果功能-状态管理相关接口定义相关方法定义 UIinput输入框&#xff1a;回车添加todo标题列表列表项Main 总体代码 非常简单入门的react-todo练习&#xff0c;代码写的很小白。 效果 技术栈&#xff1a;react-typeScript 数据分为代办Todo和已办完Done&#xff0c;可…

Lazarus安装和入门资料

azarus-2.2.6-fpc-3.2.2-win64 下载地址 Lazarus 基础教程 - Lazarus Tutorials for Beginners Lazarus Tutorial #1 - Learning programming_哔哩哔哩_bilibili https://www.devstructor.com/index.php?pagetutorials Lazarus是一款开源免费的object pascal语言RAD IDE&…

全志T507-H技术帖 | 去掉IO扩展芯片后保留扩展引脚功能的实现方法

飞凌嵌入式推出的OKT507-C作为一款广受欢迎的开发板拥有丰富的功能接口&#xff0c;而实际上OKT507-C开发板的CPU引脚资源是比较紧缺的&#xff0c;那么它究竟是如何提供如此丰富的接口资源的呢&#xff1f;答案就是IO扩展芯片——TCA6424A。 这是一个24 位 I2C 和系统管理总线…

BSP-STM32移植FreeRTOS

在stm32裸机工程中的Middlewares目录添加freeRtos源码 在裸机工程中的main中调用freertos接口

python+pytorch人脸表情识别

概述 基于深度学习的人脸表情识别&#xff0c;数据集采用公开数据集fer2013&#xff0c;可直接运行&#xff0c;效果良好&#xff0c;可根据需求修改训练代码&#xff0c;自己训练模型。 详细 一、概述 本项目以PyTorch为框架&#xff0c;搭建卷积神经网络模型&#xff0c;训…

WebGL智慧城市软件项目

WebGL开发智慧城市项目时&#xff0c;需要考虑多个方面&#xff0c;包括技术、隐私、安全和可持续性。以下是一些需要注意的关键问题&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 1.隐私和数据安全…

[100天算法】-定长子串中元音的最大数目(day 67)

题目描述 给你字符串 s 和整数 k 。请返回字符串 s 中长度为 k 的单个子字符串中可能包含的最大元音字母数。英文中的 元音字母 为&#xff08;a, e, i, o, u&#xff09;。示例 1&#xff1a;输入&#xff1a;s "abciiidef", k 3 输出&#xff1a;3 解释&#xf…