maven权威指南学习笔记(四)—— maven生命周期(lifecycle)
定义: 生命周期是包含在一个项目构建中的一系列有序的阶段
举个例子来说就是maven 对一个工程进行:
验证(validate)
……
编译源码(compile)
……
编译测试源码(test-compile)
……
单元测试(test)
……
打包(package)
……
安装至本地仓库(install)
复制到远程仓库(deploy)
的这个过就是它的一个生命周期,在上面用了很多“……”,是因为中间有些阶段(phase)省掉了(后面会详细介绍)。在一个生命周期中,每一个阶段(phase)可以理解为一个步骤,这些步骤按照既定的顺序执行来完成一个项目的构建。
生命周期中,各个步骤的工作是谁来干的呢,是插件(plugin),一个插件通常完成一个或多个步骤的工作,每个步骤的工作对应插件的一个目标(goal)。不同的插件结合起来,就可以完成整个项目的构建,例如:编译插件,compiler;测试插件,surefire;打包插件,jar;安装插件,install,部署插件,deploy。
document上说,直接执行后面步骤的命令,会把这个步骤前面的所有操作都做一遍,

但是后面又说了,
Moreover, if a goal is bound to one or more build phases, that goal will be called in all those phases.
Furthermore, a build phase can also have zero or more goals bound to it. If a build phase has no goals bound to it, that build phase will not execute. But if it has one or more goals bound to it, it will execute all those goals
(Note: In Maven 2.0.5 and above, multiple goals bound to a phase are executed in the same order as they are declared in the POM, however multiple instances of the same plugin are not supported. Multiple instances of the same plugin are grouped to execute together and ordered in Maven 2.0.11 and above).
英语不好,大概意思应该是,
如果一个目标(goal)被绑定到一个或多个阶段(phase),执行到这个阶段的时候都会调用这个目标(goal),
而且,一个阶段可以有0个以上的目标(goal)绑定,没有目标绑定,就不执行,有几个目标绑定,就执行几个。
(maven 2.0.5+的版本,对于多个goals绑定到一个阶段的,会按照POM中定义的顺序执行,但是不支持一个插件对应多个实例。一个插件多个实例的情况在 maven2.0.11+上才被支持,它们被划为一个组,一起执行)
所以我在想,如果执行了“mvn deploy”,但是没有定义前面的某些阶段,会怎样?等我测试了再补充这个地方(TODO)。
下面详说一下maven的生命周期。
maven,有三个:
Clean Lifecycle 在进行真正的构建之前进行一些清理工作。
Default Lifecycle 构建的核心部分,编译,测试,打包,部署等等。
Site Lifecycle 生成项目报告,站点,发布站点。
先说简单的两个 Clean Lifecycle 和 Site Lifecycle
Clean Lifecycle

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

pre-site 执行一些需要在生成站点文档之前完成的工作
site 生成项目的站点文档
post-site 执行一些需要在生成站点文档之后完成的工作,并且为部署做准备
site-deploy 将生成的站点文档部署到特定的服务器上
然后看,最常用,最重要的,名字却不起眼的
Default Lifecycle

validate 验证工程是否正确,所需的信息是否完整
initialize 初始化构建平台,例如:设置properties或创建目录
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 编译测试源代码(默认是test目录下)
process-test-class
test 执行单元测试
prepare-package
package 将工程文件打包为指定的格式,例如JAR,WAR等
pre-integration-test
integration-test 集成测试
post-integration-test
verify 检查package是否有效、符合标准
install 将包安装至本地仓库,以让其它项目依赖。
deploy 将最终的包复制到远程的仓库,以让其它开发人员与项目共享。
参考:
Introduction to the build lifecycle,maven document,http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html
Maven生命周期详解,juvenshun,http://juvenshun.iteye.com/blog/213959
maven权威指南学习笔记(四)—— maven生命周期(lifecycle)的更多相关文章
- maven权威指南学习笔记(五)—— POM
		
1. 简介 Archetype插件通过 pom.xml 文件创建了一个项目.这就是项目对象模型 (POM),一个项目的声明性描述. 当Maven运行一个目标的时候,每个目标都会访问定 义在项目POM里 ...
 - maven权威指南学习笔记(三)——一个简单的maven项目
		
目标: 对构建生命周期 (build lifecycle),Maven仓库 (repositories),依赖管理 (dependency management)和项目对象模型 (Project O ...
 - maven权威指南学习笔记(一)——简介
		
maven是什么?有什么用? Maven是一个项目管理工具,它包含了 一个项目对象模型 (Project Object Model), 一组标准集合, 一个项目生命周期(Pro ...
 - maven POM —— maven权威指南学习笔记(五)
		
1. 简介 Archetype插件通过 pom.xml 文件创建了一个项目.这就是项目对象模型 (POM),一个项目的声明性描述. 当Maven运行一个目标的时候,每个目标都会访问定 义在项目POM里 ...
 - maven 一个简单项目 —— maven权威指南学习笔记(三)
		
目标: 对构建生命周期 (build lifecycle),Maven仓库 (repositories),依赖管理 (dependency management)和项目对象模型 (Project O ...
 - maven 简介 —— maven权威指南学习笔记(一)
		
maven是什么?有什么用? Maven是一个项目管理工具,它包含了 一个项目对象模型 (Project Object Model), 一组标准集合, 一个项目生命周期(ProjectLifecycl ...
 - maven生命周期(lifecycle)——  maven权威指南学习笔记(四)
		
定义: 生命周期是包含在一个项目构建中的一系列有序的阶段 举个例子来说就是maven 对一个工程进行: 验证(validate) …… 编译源码(compile) …… 编译测试源码(test-com ...
 - maven权威指南学习笔记(二)——安装、运行、获取帮助
		
这部分在网上很容易找到详细教程,这里就略写了. 基础:系统有配置好的jdk,通过 命令行 java -version,有类似下面的提示,表示java环境以配好 下载maven:官网 http://ma ...
 - maven 安装、运行、获取帮助 —— maven权威指南学习笔记(二)
		
这部分在网上很容易找到详细教程,这里就略写了. 基础:系统有配置好的jdk,通过 命令行 java -version,有类似下面的提示,表示java环境以配好 下载maven:官网 http://ma ...
 
随机推荐
- 阿里云提示Discuz uc.key泄露导致代码注入漏洞uc.php的解决方法
			
适用所有用UC整合 阿里云提示漏洞: discuz中的/api/uc.php存在代码写入漏洞,导致黑客可写入恶意代码获取uckey,.......... 漏洞名称:Discuz uc.key泄露导致代 ...
 - Windows 下安装 MongoDB
			
Windows 下安装 MongoDB 的步骤:1.官网www.mongodb.com下载安装包或zip包2.解压下载的文件到文件夹 D:\mongo .3.使用管理员权限打开CMD,导航到目录 D: ...
 - Javascript的原型链图
			
90%的前端或者js程序员或者老师们对Javascript懂得不比这个多 给手机看的 但是这个图里的所有褐色单向箭头链就是Javascript的原型链(颜色标注对理解js原型链很关键) 这图中的各个_ ...
 - shell test用法
			
1)判断表达式 if test (表达式为真) if test !表达式为假 test 表达式1 –a 表达式2 两个表达式都为真 test 表达式1 –o 表达式 ...
 - webpack 配置文件
			
现如今,webpack非常的受欢迎,比较火的几款js框架都推荐使用webpack来构建项目,而webpack也确实非常强大,但是配置webpack缺常常带来很多问题,接下来就写一下我自己遇到的一些坑. ...
 - 面localStorage用作数据缓存的简易封装
			
面localStorage用作数据缓存的简易封装 最近做了一些前端控件的封装,需要用到数据本地存储,开始采用cookie,发现很容易就超过了cookie的容量限制,于是改用localStorage,但 ...
 - Makefile文件学习总结
			
Makefile文件相当于是一种脚本编程语言,目的是实现自动化编译.编写makefile文件的过程中可以使用变量.控制结构和函数等一般编程语言的特性. Makefile文件的组成内容.makefile ...
 - Android Duplicate files copied in APK
			
今天调试 Android 应用遇到这么个问题: Duplicate files copied in APK META-INF/DEPENDENCIES File 1: httpmime-4.3.2.j ...
 - PPM图片格式及其C读写代码
			
PPM图像格式介绍 PPM图像格式是由Jef Poskanzer 大叔,在我出生那一年,也就是1991年所创造的,碰巧的是PPM也是天蝎座. PPM(Portable Pixmap Format)还有 ...
 - python之路十四
			
概述 HTML是英文Hyper Text Mark-up Language(超文本标记语言)的缩写,他是一种制作万维网页面标准语言(标记).相当于定义统一的一套规则,大家都来遵守他,这样就可以让浏览器 ...