学习目标
maven 的插件和目标;
maven 的生命周期和阶段。
前言
在手记1中看到执行 mvn clean package 时,maven 自动执行了compile 和 test 操作。
compile、test和package属于一个生命周期的不同阶段。在没有特意设置的情况下,执行生命周期内一个阶段的操作会默认执行这个阶段及之前阶段的操作。有点绕口是吧,稍后慢慢说清楚。
这里有几个名词:
lifecycle -> 生命周期;
phase –> 阶段;
plugin -> 插件;
goal –> 目标 。
接下来主要就围绕这几个名词来说。
插件和目标
简要地说,一个目标是一个工作单元,一个插件是一个或多个目标的集合。
在上一篇文章中,使用了 mvn archetype:generate 这个命令来生成项目。其中archetype是一个插件的名字,generate是目标的名字。命令的意思是告诉maven执行插件archetype的generate目标。
插件和目标的用法就是如实例中一样 pluginName:goalName。
回到上篇文章中创建的项目mvntest中,执行mvn clean命令:
再执行mvn compile命令:
执行 mvn test 指令:
留意下用红线标识的位置,maven所执行的清理和编译的命令是调用了相应的插件。
实际上就是这样子的,在周期和阶段中,maven自己不执行具体的功能,具体的功能由插件来实现,一个插件可以实现多个目标(参考test阶段执行的内容)。
生命周期和阶段
在上面的示例中,执行了mvn compile 和 mvn test 两个指令。compile和test是maven生命周期的不同阶段。
生命周期指项目的构建过程。它包含了一系列有序的阶段。每一个阶段就是项目构建过程中的一个步骤。
maven默认的生命周期有三个:clean、default(build)和site。
clean:清理生命周期;
default:编译和部署生命周期;
site:生成报表和工程文档生命周期。
点击 http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html#Lifecycle_Reference 查看生命周期及其绑定的阶段的信息。
maven的生命周期相互独立,而且没有一定的顺序关系。每个生命周期划分为不同的阶段。同一个生命周期中的阶段有着明确的顺序关系。同一个生命周期中的阶段必须按既定的顺序执行。
插件目标可以被绑定到项目生命周期阶段上。每个生命周期阶段可以绑定一个或多个插件目标。
在default生命周期中,绑定的插件目标和packaging属性有关。
当项目构建过程中逐步通过某个阶段时,就会执行这个阶段的所有插件目标。
点击http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html#Built-in_Lifecycle_Bindings查看生命周期绑定的插件目标。