原文链接:https://blog.csdn.net/mr_orange_klj/article/details/82153945

Maven是基于一个build lifecycle的中心概念,意味着构建和发布特定项目的过程是明确定义的。 
对于人们构建一个项目,这意味着只需要学会少数命令来构建任意maven项目,然后pom会确保他们会得到他们想要的结果。 
有三种内置的build lifecycle:default,clean,site。default生命周期处理项目的部署,clean生命周期处理项目的清理,site生命周期生成站点文档。

Build Lifecycle由Phase组成

每种lifecycle由不同的一组phase组成,一个phase代表lifecycle的一个阶段。 
默认lifecycle执行的phase:

  • validate:验证项目的正确性以及包含所有必要的信息
  • compile:编译源码
  • test:编译和运行测试代码
  • package:把编译好的源码打成包,如jar
  • integration-test
  • verify
  • install:把项目安装到本地仓库中去,作为本地其他项目的依赖
  • deploy:把最终的包拷贝到远程仓库上和其他开发者和项目分享

这些phase(包括没有列出来的phase)会被顺序地执行来完成default lifecycle。以上面的phase为例,这意味着当使用默认的lifecycle时,Maven会首先验证项目,然后尝试编译源码,运行测试,把二进制代码打包(如jar包),对这些包运行集成测试,验证集成测试,安装验证完的包到本地仓库去,然后把安装完的包部署到远程仓库。

Build Phase由Plugin Goal组成

尽管一个phase负责lifecycle的一个阶段,但执行这些阶段的方式可能会不同,这是通过把plugin goals绑定到phase上完成的。 
一个goal代表着一个特定的任务(比phase粒度要细)用于构建和管理一个项目。goal可以绑定到0个到多个phase上,没有绑定到phase上的goal可以在lifecycle外直接使用(如使用命令行)。goal的执行顺序取决于其被调用的顺序。 例如下面命令:

 
  • 1
  • 1

上面命令中,clean phase会首先被执行,然后执行dependency:copy-dependencies goal,最后执行package phase。 
一个phase也可以有0个或多个绑定的goal,如果没有goal绑定到它身上,它将不会被执行,如果有多个goal绑定,则会执行所有绑定的goal。

一些Phase通常不会从命令行直接调用

名字中带有连字符的phase(如pre-,post-)通常不会从命令行直接调用。这些phase处理中间结果,通常不会在build lifecycle外执行。例如,直接调用integration-test,可能会出现异常。 
代码覆盖工具如Jacoco 以及容器插件如Tomcat会绑定goal到pre-integration-test phase上来准备集成测试的容器环境,这些插件还会绑定goal到post-integration-test phase来收集代码覆盖数据或销毁测试容器环境。 
失效保护(Failsafe )和代码覆盖插件绑定goal到integration-test和verify phase上,结果就是在verify phase后可以得到测试和代码覆盖的报告。如果integration-test从命令行调用,不会有报告产生,更糟糕的情况是集成测试的环境可能停留在挂起的状态。

设置项目使用的Build Lifecycle

build lifecycle使用起来很简单,但在maven项目构建时,我们怎么给每个phase指定任务呢?

Packaging

首先我们可以通过packaging元素设置项目的打包方式来指定任务,maven支持的打包方式有:jar, war, ear 和 pom。如果不指定,默认为jar。 
每种打包方式都包含了一系列的goal绑定到特定的phase上,例如,jar的打包方式会绑定下面的goal到default lifecycle的phase上:

  • process-resources —— resources:resources
  • compile —— compiler:compile
  • process-test-resources —— resources:testResources
  • test-compile —— compiler:testCompile
  • test —— surefire:test
  • package —— jar:jar
  • install —— install:install
  • deploy —— deploy:deploy

如上所示几乎是标准的绑定,但一些打包方式会有所不同。例如,pom打包方式只给install和deploy phase绑定goal。完整的绑定列表可以参考Lifecycle Reference

Plugin

第二中添加goal到phase上的方式是配置项目中的插件。插件是给Maven提供goal的artifact。另外,一个插件可能会有一个或多个goal,每个goal代表了这个插件的一种能力。例如Compiler插件有两个goal:compile和testCompile,前面一个用来编译main下的源码,后面一个用来编译test源码。 
插件可以把goal绑定到指定的phase上,要注意,把插件本身添加进来还不够,必须指定哪些goal要作为我们构建项目的一部分。 
如果有多个goal绑定到一个phase上,会先执行本来的goal,再执行pom中绑定到phase上的goal,也可以在executions标签上指定goal的执行顺。

idea中Maven-build lifecycle中下面标签详解的更多相关文章

  1. 架构实战项目心得(四)(补):Maven settings.xml的所有标签详解

    文章内容较长,各位看客可以根据自己需要CTRL+F 直接定位到自己需要了解的地方哦~ <?xmlversion="1.0" encoding="UTF-8" ...

  2. jsp中引用的jstl 和fmt标签-详解

    JSTL 核心标签库标签共有13个,功能上分为4类: 1.表达式控制标签:out.set.remove.catch 2.流程控制标签:if.choose.when.otherwise 3.循环标签:f ...

  3. 【转载】html中object标签详解

    [转载自http://blog.csdn.net/soliy/archive/2010/03/22/5404183.aspx] html标签之Object标签详解 作者:网络    出处:网络     ...

  4. JSP页面中的Meta标签详解

    Meta标签详解 相信大家在平时开发中最常接触的页面就是html和jsp了,可在这两个页面中有一个Meta标签你天天都会看见,可是你真的了解这个标签的一些其他用处吗?今天给大家介绍一些该标签的其他应用 ...

  5. CSS中伪类及伪元素用法详解

    CSS中伪类及伪元素用法详解   伪类的分类及作用: 注:该表引自W3School教程 伪元素的分类及作用: 接下来让博主通过一些生动的实例(之前的作业或小作品)来说明几种常用伪类的用法和效果,其他的 ...

  6. SVN组成中trunk,branches and tags功能用法详解

    SVN组成中trunk,branches and tags功能用法详解  我相信初学开发在SVN作为版本管理时,都估计没可能考虑到如何灵活的运用SVN来管理开发代码的版本,下面我就摘录一篇文章来简单说 ...

  7. UIViewController中各方法调用顺序及功能详解

    UIViewController中各方法调用顺序及功能详解 UIViewController中loadView, viewDidLoad, viewWillUnload, viewDidUnload, ...

  8. 单元测试系列之四:Sonar平台中项目主要指标以及代码坏味道详解

    更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢! 原文链接:http://www.cnblogs.com/zishi/p/6766994.html 众所周知Sona ...

  9. 详解Android中的四大组件之一:Activity详解

    activity的生命周期 activity的四种状态 running:正在运行,处于活动状态,用户可以点击屏幕,是将activity处于栈顶的状态. paused:暂停,处于失去焦点的时候,处于pa ...

  10. opencv中 int main(int argc,char* argv[])详解

    opencv中  int main(int argc,char* argv[])详解 argc是命令行总的参数个数     argv[]是argc个参数,其中第0个参数是程序的全名,以后的参数     ...

随机推荐

  1. 删除无用docker镜像

    docker images | grep none | grep -v grep | awk '{print $3}' | xargs docker rmi -f

  2. Java 复习整理day06

    Java api 章节除了一下列的常用类别的用时候查文档 1 package com.it.demo01_api; 2 3 import java.util.Scanner; 4 5 /* 6 案例: ...

  3. DEDECMS的20位MD5加密密文解密

    解密20位md5,20位md5加密算法.   dedecms的20位md5加密算噶是从32位md5中截取的20位,所以去掉前3位喝最后1位,即可获得16位md5值,即可破解15位md5.   例如:  ...

  4. DedeCMS程序使用拼音首字母做栏目名称的方法

    Dedecms织梦程序默认使用拼音为保存目录的时候使用的是中文全拼,当遇到栏目名称比较长的时候目录名称看起来有点冗长,这时候大多数站长喜欢使用拼音首字母作为栏目的保存目录,那么就需要修改 dede/c ...

  5. 思维导图整理Java并发基础

    话不多说,先上图. 1.基本概念 欲说线程,必先说进程. 进程:进程是代码在数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位. 线程:线程是进程的一个执行路径,一个进程中至少有一个线程,进 ...

  6. 设计模式(九)——装饰者模式(io源码分析)

    1 星巴克咖啡订单项目(咖啡馆): 1) 咖啡种类/单品咖啡:Espresso(意大利浓咖啡).ShortBlack.LongBlack(美式咖啡).Decaf(无因咖啡) 2) 调料:Milk.So ...

  7. 十四自定义构建购物计算组件&表单组件

    目录: 1.前言 2.组件介绍 3.js业务逻辑层 4.视图层 5.css属性设置 6.效果呈现 1.前言: 在第九篇文章购物车做好后,还忘记了一个至关重要的计算组件.在鸿蒙的组件中并没有提供这样一个 ...

  8. jQuery读取数据

    1.jQuery读取JSON <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "htt ...

  9. Educational Codeforces Round 90 (Rated for Div. 2) D. Maximum Sum on Even Positions(dp)

    题目链接:https://codeforces.com/contest/1373/problem/D 题意 给出一个大小为 $n$ 的数组 $a$,下标为 $0 \sim n - 1$,可以进行一次反 ...

  10. Codeforces Round #634 (Div. 3)

    D题想复杂了,花了好多时间,感觉也没时间看F了,就来写个题解蹭蹭访问量把^_^ 传送门:1335 A. Candies and Two Sisters 题意:你要把n个糖果分给两个人,两个人的糖果数不 ...