生成生命周期介绍

2023-05-16

翻译自http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html

目录

  • 目录
  • 生成生命周期基础
    • 生成生命周期由阶段组成
    • 通用命令行调用
    • 一个生成阶段是由插件目标组成
    • 某些阶段通常不从命令行调用
  • 设置项目以使用生成生命周期
    • 封包
    • 插件
  • 生命周期参考
  • 内置生命周期绑定

生成生命周期基础

Maven是基于生成生命周期这一核心概念的。这意味着生成和分配特定组件(项目)的过程是有明确定义的。
对于项目生成者而言,这意味着为了能够生成Maven项目,学习一系列命令是必要的,项目目标模型(POM)可以确保他们获得他们想要的结果。
有三个内置的生成生命周期:默认(default),清空(clean),站点(site)。default生命周期处理项目部署,clean生命周期处理项目清空,site生命周期处理项目站点文档的创建。

生成生命周期由阶段组成

每一个组件的生命周期是依据不同生成阶段的清单所定义,清单中的每一个生成阶段是生命周期的一部分。
例如,默认生命周期包括以下阶段(对于生命周期阶段的完整列表,请参照生命周期参考):

  • validate - 验证项目是正确的,所有必要的信息是可用的
  • compile - 编译项目的源代码
  • test - 使用合适的单元测试框架测试编译后的源代码。这些测试不需要打包或部署源码
  • package - 将已编译的代码封装成可发布的格式,如JAR包
  • verify - 运行任何对集成测试结果的检查,以确保达到质量标准
  • install - 将包安装到本地储存库中,以便在其他项目中用作本地的依赖项
  • deploy - 在生成环境中完成部署,将最终包复制到远程存储库,以便与其他开发人员及项目共享。

这些生命周期阶段(加上其他生命周期阶段没有显示在这里)顺序执行,以完成default生命周期。上述所给出的周期阶段意味着当默认生命周期运行时,Maven将首先验证项目,然后将尝试编译源代码,运行针对包和二进制文件(如JAR)的测试,针对整个包运行集成测试,验证集成测试,安装已验证的包到本地储存库,然后将安装包部署至远程存储库。

通用命令行调用

在开发环境中,使用下面的调用在本地存储库中生成和安装构件。

mvn install

在执行此命令前,即在执行install前,每个默认生命周期阶段(validatecomplilepackage等)都将被依次执行。您只需要调用最后一个生成阶段来执行,在这种情况下即为,install
在生成环境中,使用下面的调用可以清空已有生成并部署构件至共享存储库中。

mvn clean deploy

同样的命令可以用在多模块的情况下(即一个项目包含一个或一个以上子项目)。Maven将进入每个子项目执行clean,然后执行deploy(包括所有现有的生成阶段的步骤)。

一个生成阶段是由插件目标组成

然而,即使是由生成阶段负责生成生命周期中的特定步骤,但执行这些职能的方式可能会有所不同。这是通过声明绑定到这些生成阶段的插件目标来实现的。
插件目标代表一个特定的任务(比生成阶段更精细),它有助于项目的建立和管理。它可以绑定到零或更多的生成阶段。未绑定到任何生成阶段的目标可以通过直接调用使其在生成生命周期之外执行。执行顺序取决于目标和生成阶段的调用顺序。例如,考虑下面的命令。cleanpackage参数属于生成阶段一级,而dependency:copy-dependency是目标(插件目标)级。

mvn clean dependency:copy-dependencies package

在执行时,clean阶段将首先执行(这意味着它将运行clean之前的所有的阶段,加上clean阶段自身),然后执行dependency:copy-dependencies目标,最后执行package阶段(和在其之前默认生命周期的生成阶段)。
此外,如果一个目标被绑定到一个或多个生成阶段,这个目标将在所有这些阶段都将被调用。
此外,一个生成阶段也可以有零个或多个目标绑定到它。如果生成阶段没有与它绑定的目标,则生成阶段不会执行。但如果它有一个或多个目标,它将执行所有这些目标
(注:在Maven 2.0.5以上,多目标绑定到一个阶段都是以他们在POM声明的顺序执行,但不支持相同插件的多个实例。但是,相同插件的多个实例在Maven 2.0.11以上可以被分组排序后共同执行)

某些阶段通常不从命令行调用

以前缀词命名的阶段(pre-*post-*,或process-*)通常不是从命令行直接调用。这些阶段安排生成顺序,生成不被生成过程外所用的中间结果。如在调用integration-test的情况下,环境可能以挂起状态终止。
代码覆盖工具如Jacoco和执行容器插件如Tomcat,Cargo,Docker绑定目标至pre-integration-test阶段以准备集成测试容器环境。这些插件也绑定目标至post-integration-test以收集覆盖统计结果或使用完毕的集成测试容器。
故障和代码覆盖插件绑定目标在integration-testverify阶段。最终结果测试和覆盖报告在verify阶段后可用。如果从命令行调用integration-test,则不生成报告。更糟糕的是,集成测试容器的环境会以挂起状态终止;Tomcat网络服务器或Docker实例会终止运行,而Maven可能不会自行终止。

设置项目以使用生成生命周期

生成生命周期的使用较为简单,但是当制作一个Maven生成项目时,该如何分配任务的各个生成阶段?

封包

最常见的方式,是通过有同样命名的POM元素<packaging>来设置封包。一些有效的封包方式有jarwarearpom。如果没有指定封包格式,它将默认为JAR。
每个封包包含着一系列目标以绑定一个阶段。如,jar封包将绑定如下目标至默认生命周期中的生成阶段

生成阶段目标
process-resourcesresources:resources
compilecompiler:compile
process-test-resourcesresources:testResources
test-compilecompiler:testCompile
testsurefire:test
packagejar:jar
installinstall:install
deploydeploy:deploy

这是一个近乎标准的绑定设置;然而,一些封包采用不同方式处理。例如,一个项目,是纯粹的元数据(封包方式是POM)只绑定目标至installdeploy阶段(因为一个完整的目标-生成阶段清单已经绑定了一些封包类型、参见生命周期参考)。
值得注意的是为了使一些封包类型可用,您可能还需要在POM中的<build>模块包含特定插件,并且为该插件制定<extensions>true</extensions>。需求这个的一个插件例子是Plexus插件,它提供了一个plexus-applicationplexus-service封包。

插件

第二种将目标添加到阶段的方法是在项目中配置插件。插件是为Maven提供目标的元件。此外,插件可能有一个或多个目标,其中每个目标代表插件的一个功能。例如,编译器插件有两个目标:compiletestcompile。前者编译主要代码的源码,而后者编译测试代码的源码。
正如您将在后面的部分看到的,插件可以包含可绑定目标的生命周期阶段的指示信息。请注意,仅添加插件本身是信息不足的-您还必须指定作为你的生成中想运行的目标。
被配置的目标将被添加到从在封包选择时已绑定至生命周期的目标中。如果有多个目标绑定到一个特定的阶段,执行的顺序是首先是封包中的目标,其次是配置在POM中的目标。请注意,您可以使用<executions>元素以获得对特定目标顺序的更多控制权。
例如,Modello插件默认绑定目标modello:javagenerate-sources阶段(注:modello:java目标生成Java源码)。所以为使用Modello插件和用它从模型生成源码并将其包含入生成之中,你需要将以下部分添加至POM里<build>中的<plugins>阶段:

 <plugin>
   <groupId>org.codehaus.modello</groupId>
   <artifactId>modello-maven-plugin</artifactId>
   <version>1.8.1</version>
   <executions>
     <execution>
       <configuration>
         <models>
           <model>src/main/mdo/maven.mdo</model>
         </models>
         <version>4.0.0</version>
       </configuration>
       <goals>
         <goal>java</goal>
       </goals>
     </execution>
   </executions>
 </plugin>

你也许困惑为何<execution>元素在那里。这是因为通过这样才能用不同配置运行多次相同目标。拆分的执行也可以被给予一个ID,以便在继承或应用概况中,您可以控制目标设置是否合并或产生额外的执行。
当有多个属于同一阶段的执行时,他们将按POM中指定的顺序执行,被继承的执行优先运行。
modello:java为例,它只在generate-sources阶段有效。但是一些目标可以在多个阶段使用,并且可能没有一个明确的默认设置。对于这些目标,你可以自行指定阶段。例如,假设你有一个目标display:time,它会将当前时间反馈到命令行,如果你想要它运行在process-test-resources阶段以表明当测试开始的时间。这将配置如下:

 <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>

生命周期参考

以下列出了defaultcleansite生命周期的所有生成阶段,他们按照给定的点顺序执行。
Clean生命周期

阶段说明
pre-clean在实际项目清理之前执行所需的过程
clean删除之前生成的所有文件
post-clean执行完成项目清理所需的过程

Default生命周期

阶段说明
validate验证项目是否正确,所有必要的信息是否可用
initialize初始化生成状态,例如设置属性或创建目录
generate-sources为编译引用生成所有源代码
process-sources处理源代码,例如过滤某些值
generate-resources为包中的引用生成资源
process-resources将资源复制至目标地址并处理,以备打包
compile编译工程源代码
process-classes编译过程后处理生成文件,例如对Java类做字节码增强
generate-test-sources为编译引用生成测试源代码
process-test-sources处理测试源代码,例如过滤某些值
generate-test-resources为测试生成资源
process-test-resources复制资源至测试目标目录并处理
test-compile编译测试源代码至测试目标目录
process-test-classes测试编译过程后处理生成文件,例如对Java类做字节码增强。需要Maven 2.0.5以上
test使用合适的单元测试框架运行测试,这些测试不应当要求代码已打包或已部署
prepare-package在实际封包前执行所有必要的准备工作,这经常产生原包的未打包、已加工版本(需要Maven 2.1及以上)
pre-integration-test在集成测试前执行所需操作,这也许会涉及设置需求环境等操作
integration-test处理并且部署(如果需要)包至集成测试可运行的环境
post-integration-test在集成测试后执行所需操作,这可能包括清理环境
verify运行检查以确保包可用并且达到质量标准
install将包安装至本地资源库中,使得其他工程可将其作为本地依赖项使用
deploy在集成或发布环境中完成,将最终包复制到远程存储库,以便与其他开发人员和项目共享

Site生命周期

阶段说明
pre-site在实际项目站点生成之前执行所需的过程
site生成项目的站点文件
post-site执行完成网站生成所需的流程,并为网站部署做准备
site-deploy将生成的站点文档部署到指定的web服务器

内置生命周期绑定

有些阶段有默认与其绑定的目标。对于默认生命周期,这些绑定取决于封包值。以下是指向生成阶段目标的绑定情况。
clean生命周期绑定

生命周期目标
cleanclean:clean

default生命周期绑定 - 封包格式ejb / ejb3 / jar / par / rar / war

生命周期目标
process-resourcesresources:resources
compilecompiler:compile
process-test-resourcesresources:testResources
test-compilecompiler:testCompile
testsurefire:test
packageejb:ejb or ejb3:ejb3 or jar:jar or par:par or rar:rar or war:war
installinstall:install
deploydeploy:deploy

default生命周期绑定 - 封包格式ear

生命周期目标
generate-resourcesear:generate-application-xml
process-resourcesresources:resources
packageear:ear
installinstall:install
deploydeploy:deploy

default生命周期绑定 - 封包格式maven-plugin

生命周期目标
generate-resourcesplugin:descriptor
process-resourcesresources:resources
compilecompiler:compile
process-test-resourcesresources:testResources
test-compilecompiler:testCompile
testsurefire:test
packagejar:jar and plugin:addPluginArtifactMetadata
installinstall:install
deploydeploy:deploy

default生命周期绑定 - 封包格式pom

生命周期目标
packagesite:attach-descriptor
installinstall:install
deploydeploy:deploy

site生命周期绑定

生命周期目标
sitesite:site
site-deploysite:deploy

参考
所有Maven生命周期是定义在maven-core模块的components.xml文件中,参考相关文件。
在Maven 2.x版本,默认生命周期的绑定被列入components.xml但在Maven 3.x版本中,他们是在一个单独的default-bindings.xml中所定义。
查看生命周期参考和默认生命周期下的插件绑定以直接从源代码中获得最新的文档。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

生成生命周期介绍 的相关文章

  • 远程桌面连接mstsc win10开启与配置

    开启服务 方法1 在设置 系统 远程桌面中 xff0c 打开启用远程桌面功能 方法2 在控制面板 系统 允许远程访问中 xff0c 远程桌面里打开允许远程连接到此计算机功能 允许多个远程桌面连接 win 43 r 输入gpedit msc
  • 决策树CART、ID3、C4.5原理梳理

    老饼讲解机器学习 http ml bbbdata com teach 108 目录 一 学习决策树原理的顺序 二 CART分类树 一 分类树模型结构 二 分类树构建过程 二 剪枝 防止过拟合 xff09 三 CART回归树模型 四 ID3算
  • 麻将胡牌判定方法-索引法

    麻将胡牌判定方法 xff08 查表法 xff0c 翻译自http hp vector co jp authors VA046927 mjscore mjalgorism html xff09 麻将高速判定胡牌方法说明使用索引法如何检查所有形
  • 基于msOS-stm32系统选择的想法

    由于换了家公司 xff0c 虽然都要从事底层代码开发 xff0c 但由于算是跨行业了 xff0c 很多东西都需要从新开始 xff0c 很是麻烦和头疼 xff0c 所以感觉轻易不要换行业 还好主要核心没有改变多大 xff0c 没多久就适应了
  • aop 使用案例

    1 主要使用场景 xff1a 数据比对 xff0c 本系统数据库内部数据和第三方数据比对是否一致 xff0c 差别 因为需要时间比较长 xff0c 避免用户短时间重复点击问题 aop 通过注解的方式 xff0c 根据请求地址和参数 xff0
  • 解决pom文件project标签爆红波浪线,一直提示:Could not find artifact xxx from xxx,格式不规范,从pdf资料中拷贝pom依赖各种却死活无法下载依赖且爆红

    解决了pom文件project标签爆红波浪线 一直提示 xff1a Could not find artifact xxx from xxx 格式不规范 从pdf资料中拷贝pom依赖各种却死活无法下载依赖且爆红等原因 样例1 spring
  • CentOS tomcat自启动

    CentOS tomcat自启动 在CentOS 7 操作系统上安装Tomcat xff0c 默认是不能进行服务自启动的 而对于Web应用而言 xff0c 服务器reboot后 xff0c 必须需要能够自动启动 在 usr lib syst
  • Java基础之爬虫

    文章目录 前言一 本地爬虫二 网络爬虫 前言 如下文本 xff0c 请按要求爬取数据 java自从95年问世以来 xff0c 经历了很多版本 xff0c 目前企业中用的最多的是java8和java11 xff0c 因为这两个是长期支持版本
  • Ubuntu远程SSH及x11vnc远程桌面连接

    一 连接SSH 1 开启ssh sudo apt update 更新源列表 sudo apt get install openssh server 安装ssh服务 sudo ps e grep ssh 查看ssh服务是否启动 如图则已开启
  • 配置编译带cuda版本并支持cudacodec硬编解码opencv库笔记

    写这个笔记主要是记录配置编译opencv 43 cuda 43 cudacodec的过程核经历 xff0c 这里面的坑实在太多 参考文章 xff1a https note youdao com ynoteshare1 index html
  • SSH登录CentOS服务器并在Docker中运行和显示GUI程序的方法

    SSH和Docker都是字符界面 xff0c 以前都是通过字符界面登录服务器并运行Docker中的程序 xff0c 将输出结果 xff08 视频或者图片 xff09 传回来进行结果查看和分析 xff0c 这样效率太低了 xff0c 于是周末
  • 字符数组及字符串 是否添加'\0'

    lt span style 61 34 font family Arial Helvetica sans serif background color rgb 255 255 255 34 gt lt span gt lt span sty
  • MapReduce编程(入门篇)

    一 MapReduce 编程模型 还是以一个经典的图片来说明问题 1 首先 我们能确定我们有一份输入 而且他的数据量会很大 2 通过split之后 他变成了若干的分片 每个分片交给一个Map处理 3 map处理完后 tasktracker会
  • 如何优雅的用 VScode 编写 C++ 大型项目?

    vscode远程开发配置 由于后面项目用到了epoll和splice xff0c 这些都是unix环境中才有的调用 xff0c 所以我们还是需要在linux环境中开发 xff0c 我选用的vscode连接linux进行远程开发 选用vsco
  • Ubuntu16.04安装常用开发软件

    xff08 1 xff09 gcc和g 43 43 sudo apt span class hljs attribute get span install build span class hljs attribute essential
  • 用python爬取电影名,演员,评分等并存入excel

    1在python环境下找到安装python的路径 2在这个文件名后cmd 43 enter进入黑框 3在黑框中安装jupyter notebook 黑框中也可以安装其他python编辑是需要用的包 4创建一个学习python的文件夹 xff
  • matlab cody学习笔记 day16

    这道题目如果要理逻辑其实还挺麻烦的 xff0c 所以打算好好理理这道题目 xff08 1 xff09 Find the longest sequence of 1 39 s in a binary sequence Given a stri
  • matlab GUI学习笔记1 如何生成一个GUI文件,及如何修改保存后的.fig文件

    最近需要做一个项目的小软件 xff0c 学习如何用matlab GUI生成一个小软件 xff0c 带对话框等等 所以这几天对matlab GUI的分步学习进行记录 我的matlab版本是R2017a 首先是如何在matlab中生成一个GUI
  • SDN相关题目

    1 判断题知识点 xff1a OpenDaylight 难度 xff1a 初级 科目 xff1a SDN Maven是一个采用纯Java编写的开源项目管理工具 对 错 回答错误正确答案 xff1a 对 解析 xff1a Maven是JAVA
  • Podman 使用指南

    原文链接 xff1a Podman 使用指南 Podman 原来是 CRI O 项目的一部分 xff0c 后来被分离成一个单独的项目叫 libpod Podman 的使用体验和 Docker 类似 xff0c 不同的是 Podman 没有

随机推荐

  • matlab GUI学习笔记2 如何关闭窗口和打开新的窗口 如何计算输入的数据

    今天主要是三个内容 xff1a xff08 1 xff09 如何关闭窗口 xff1b xff08 2 xff09 打开新的窗口 xff1b xff08 3 xff09 如何计算输入的数据 xff0c 并显示结果 xff08 1 xff09
  • matlab GUI学习笔记3 如何添加axes并刷新计算结果,以及初始化axes的句柄。

    从昨天开始matlab GUI的编程需要用到图像显示了 xff0c 也就是axes插件 xff0c 里面涉及到很多问题 xff0c 一一记录下来解决方法 xff08 1 xff09 首先添加axes xff0c 很简单 图像显示框的名称叫坐
  • matlab 小tips 如何保存大的矩阵文件

    今天为了提高程序运行速度 xff0c 把中间值的矩阵打算存成文件 xff0c save的时候报错了 xff0c 原因是要保存的矩阵超过了2G 解决方法很简单 xff0c 就是在save语句的最后添加一个 39 v7 3 39 就成功了 sa
  • matlab GUI学习笔记6 如何更改窗口标题,以及设置edit/text输入框的默认值

    写了好久的本子 xff0c 老师又给软件提了些要求 xff0c 需要进行修改 xff08 1 xff09 更改窗口标题 为了方便窗口编程 xff0c 每个窗口的名称都设置的很明了 xff0c 例如下图这样 xff0c 这个窗口对应的就是主窗
  • matlab cody学习笔记 day23 判断输入的是否是向量

    好久没更新了 xff0c 今天刷一道 1 Problem 605 Whether the input is vector Given the input x return 1 if x is vector or else 0 我本来想的是获
  • 串口通信校验方式(even,odd,space,mark)

    无校验 xff08 no parity xff09 奇校验 xff08 odd parity xff09 xff1a 如果字符数据位中 34 1 34 的数目是偶数 xff0c 校验位为 34 1 34 xff0c 如果 34 1 34 的
  • Eigen介绍及简单使用

    Eigen是可以用来进行线性代数 矩阵 向量操作等运算的C 43 43 库 xff0c 它里面包含了很多算法 它的License是MPL2 它支持多平台 Eigen采用源码的方式提供给用户使用 xff0c 在使用时只需要包含Eigen的头文
  • APM最新固件(20181220)

    ardupilot Makefile MAKEFILE LISTWAF BINARY 61 modules waf waf lightWAF 61 python WAF BINARY WAF FLAGSEXPLICIT COMMANDS 6
  • Java考试复习

    java考试复习 1 判断题 单选题 填空题看网上测试 xff1b 注意 xff01 xff01 xff01 xff08 单选题答案里面的粗黑的有分号是代表同时满足 xff1b 填空题答案里面的粗黑的有分号是代表其中一个就满足 xff09
  • 计算机网络之第4章 网络层

    计算机网络 第4章 网络层 网络层概述 以下属于网络层范畴的是 IP地址在因特网使用的TCP IP协议栈中 xff0c 核心协议是 IP 网络层提供的两种服务 TCP IP参考模型的网络层提供的是 无连接不可靠的数据报服务 IPv4地址概述
  • 中标麒麟Linux服务器5.0(mips64el)安装QT开发环境

    中标麒麟服务器5 0 xff08 mips64el xff09 上QT开发需要用到can口 xff0c 原版自带的QT不包含相关模块 xff0c 故重新下载一个带有can模块的qt版本进行安装 该系统架构是mips64el的 xff0c 所
  • mavros永远连接失败

    之前在做无人机使用px4源码避障的实物实验 xff0c 已经有了无人机 xff0c 想按照惯例先在nvidia NX上位机上跑一下仿真实验测试一下 xff0c 结果mavros用了一万种方法 xff0c 就是连不上 xff0c 仿真跑不了
  • 成功解决mingw下载太慢的问题

    MinGW w64 for 32 and 64 bit Windows Browse Files at SourceForge net 1 在此页面下滑找到你要下载的文件 2 点击Problems Downloadings 3 选择一个合适
  • PyQt5学习笔记9_使用setStyle和setStyleSheet进行换肤

    通过QStyleFactory keys 可获取用于setStyle的有效值 xff0c 本例程中包含 Windows xff0c WindowsXP xff0c WindowsVista xff0c Fusion 四种风格 xff0c 此
  • mkdir 创建目录

    参数选项 参数说明 p 连续创建目录 mkdir data 创建目录data 或 cd mkdir data 或 cd mkdir data 注 xff1a 是将两条命令分隔开 mkdir p data b c 连续创建目录 data b
  • CC, TBD, EOD都是什么鬼?拯救一写英文邮件就发慌

    职场新人在工作中经常听到这样的对话 xff1a 给客户的邮件记得CC我 xff0c BCC给财务 xff0c 告诉客户合同签订时间还TBD But CC BCC TBD到底是什么鬼 xff1f 马上来恶补一下职场英文缩写 xff0c 拯救一
  • Apache Openmeetings安装介绍

    翻译自Apache OpenMeetings 更新时间 xff1a 2017 01 11 目录 目录Openmeetings安装端口NAT设置自定义硬件需求Debian链接更新日志VoIP提示和技巧 Openmeetings安装 从过往版本
  • Could not transfer artifact xxx from/to xxx解决方案

    在做Openmeetings二次开发的时候install时出现了如下错误 INFO Parent project loaded span class hljs keyword from span repository org apache
  • MavenInvocationException解决方案

    在编译Openmeetings的时候出现了这样的错误信息 xff1a MavenInvocationException Error configuring command line Reason Maven executable not f
  • 生成生命周期介绍

    翻译自http maven apache org guides introduction introduction to the lifecycle html 目录 目录生成生命周期基础 生成生命周期由阶段组成通用命令行调用一个生成阶段是由