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 ...
随机推荐
- [Asp.net]常见word,excel,ppt,pdf在线预览方案,有图有真相,总有一款适合你!
引言 之前项目需要,查找了office文档在线预览的解决方案,顺便记录一下,方便以后查询. 方案一 直接在浏览器中打开Office文档在页面上的链接.会弹出如下窗口: 优点:主流浏览器都支持. 缺点: ...
- 移动端开发概览【webview和touch事件】
作为一个前端,而且作为一个做移动端开发的前端,那意味着你要有三头六臂,跟iOS开发哥哥一起打酱油,跟Android开发哥哥一起修bug... Android vs Ios 我在webkit内核的chr ...
- 【学习笔记】Struts2之配置处理结果
Action只是Struts2控制器的一部分,所以它不能直接生成对浏览者的响应.Action只负责生成响应的视图组件,通常是JSP页面,而Action会为JSP页面提供显示数据. Ac ...
- rails数据库查询 N + 1 查询的解决办法
schema.rb ActiveRecord::Schema.define(version: 20150203032005) do create_table "addresses" ...
- 耿丹CS16-2班第三次作业汇总
-- Deadline: 2016-10-12 22:48 -- 作业内容: 1.实验2-6 猜数字游戏 2.实验2-7 判断能否为三角形 3.实验2-8 个人所得税计算器 -- 第三次作业总结: 1 ...
- 泛型DAO与泛型Service
泛型Dao与Service 看了几个帖子,泛型Dao与Service的主要目的就是要减少重复代码.具体的说明如下: 1. 定义一个BaseDao接口,此接口包含了一些通用的DAO操作,例如:增加.删除 ...
- Java课程设计--山寨版QQ
Java课设要求做一个聊天通讯窗口,索性直接照着QQ撸了一个Demo出来 界面高仿qq,初学JAVA,技术比较渣,不喜勿喷 线程开的比较多性能不是太好,一般电脑开两个客户端聊天就卡卡的 先上图 使用方 ...
- Markdown简单语法
Content 标题大小 斜体和加粗 分割线 有序列表和无序列表 链接 代码框 标题大小 在字体下方加上-和=分别表示一级标题和二级标题,例如: 一级标题 --- 二级标题 === 或者使用#的个数表 ...
- cxf ServerFactoryBean 生成基于soap1.2的WebServices
//获得服务工厂bean ServerFactoryBean bean = new ServerFactoryBean(); HTTPTransportFactory httpTransportFac ...
- web端小知识点--持续更新
1.弹性滚动overflow:auto; -webkit-overflow-scrolling: touch; -mo-overflow-scrolling: touch; overflow-scro ...