Maven的设计哲学是Convention over configuration(惯例先于配置)。在设计之初,Maven就确定了三个常见的工作流程,流程固定,流程节点可配置。
总体的架构
Maven的工作流程分三层:lifecycle(流程),phase(节点),goal(任务)。(括号内的内容为我个人理解的翻译为中文的意思,非直译)。lifecycle定义一系列的phase,每一个phase上挂任意个goal(goal由plugin提供)。与工作流相似,maven驱动流程的运行,单个节点可以定制,具体要做些什么,可以是0个,1个,或者多个任务。理论上来讲,lifecycle确定,那么phase就确定了,不能新增或者删除(可以空跑),phase与goal之间是最灵活的,可以定制某个phase,具体可以干什么。
phase概览
maven自己提供三个lifecycle:clean,build,site。它们的pahse分别如下:
phase与goal如何关联
phase与goal的关联,有两条途径。
- package的内建定义
maven定义了好几种package类别,每一种package都自己定义了在在哪一个phase上关联哪些goal的信息。常见的package有pom,jar,war,ear,bundle等。也可以自己定义新的package(通过插件机制)。 - 自定义
通过插件的execution配置项,可以配置把该plugin的哪一个goal配置到哪一个phase上。比如下面的例子。
结语
我们下maven命令的时候,一般下在phase上。lifecyle可否自定义,我的理解应该可以,不过一般是不大需要的,加新的package一般也只是mapping phase和goal。