Maven插件和生命周期
2017-03-19 00:00
197 查看
摘要: 浅谈Maven的插件机制和生命周期
先说说怎么打成Jar包,如果我们想利用Maven把项目打成Jar包,就需要使用maven-jar-plugin这个插件。
同理,打成War包则需要maven-war-plugin插件。接下来就详细说说怎么使用这两个插件,在使用插件之前,我们有必要了解一下Maven的插件机制。
学过Maven的同学都知道Maven生命周期(Lifecycle)的概念,在生命周期的每个阶段,Maven都会去做不同的工作,例如测试、连接、编译、打包等等。但是,你可能不知道的是,这些工作实际上都是由插件来完成的,事实上Maven生命周期是抽象的,它本身几乎不做任何工作,在生命周期的每个阶段,都是由一些具体的默认的插件来完成的。
说到这里,你可能明白了一点。Maven的生命周期就如同Java中的接口(Interface)一样,规定了对外的操作的一套动作。但是具体的实现,则是由插件来完成的。
综上,我们可以看出,Maven在运行时会按照一定的生命周期进行,每个周期都包括一些具体的执行阶段叫Phase,在每个阶段(Phase),maven会去查看环境(即pom.xml)中配置了哪些插件,然后运行它,这就是Maven的插件机制。
Maven通过插件来完成具体的任务,也就是说项目的每一个build步骤都可以绑定一个或多个插件,而且Maven的大多数build步骤都绑定了默认的插件,例如针对编译的插件有maven-compiler-plugin,针对测试的插件有maven-surefire-plugin等,甚至在遇到一些特殊的需求时,用户可以配置插件定制build行为,也可以自己编写插件。
关于Maven的生命周期,不懂的同学可以看看Maven官网上的介绍,在此就不再赘述了,关于Maven生命周期,请访问:
http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html
然后自己详细研究。
为了更好地使用和配置我们的插件,我们必须对Maven的生命周期有一个详细的了解,正如我前面所说的,Maven的生命周期和插件是绑定在一起的,用以完成实际的构建任务。这真是我们要了解和熟悉Maven生命周期的原因。
实际上,说Maven的生命周期和插件是绑定在一起的,并不是十分准确。更具体地说,是生命周期的具体阶段(Phase)和插件的目标(Goal)绑定在一起。
Maven的生命周期(Lifecycle)是由多个阶段(phase)组成的,每个阶段(phase)会绑定一个或者多个Goal,Goal是Maven里面最小任务执行单元,相当于Ant里面的target和Gradle里面的Task。
Maven的生命周期有三套,这三套生命周期是相互独立的,分别是clean、default、site。
其中,clean是清理项目的生命周期,主要是在进行项目构建之前执行一些清理工作,例如清除target文件夹下面的资源和文件等等。
default是构建项目的生命周期,这个是我们最常用的,也是用的最多的生命周期,主要执行项目的构建,包括项目的测试、编译、打包和部署等等。
site是建立项目站点的生命周期,主要是生成项目报告、站点和部署站点等等。
接下来,我们就来详细说说每个具体的生命周期,以及每个生命周期里面包含哪些Phase,怎么把Phase和Goal进行绑定等等。
l pre-clean 执行一些需要在clean之前完成的工作
l clean 移除所有上一次构建生成的文件
l post-clean 执行一些需要在clean之后立刻完成的工作
mvn clean 中的clean就是上面的clean,在一个生命周期中,运行某个阶段的时候,它之前的所有阶段都会被运行,也就是说,mvn clean 等同于 mvn pre-clean clean ,如果我们运行 mvn post-clean ,那么 pre-clean,clean 都会被运行。这是Maven很重要的一个规则,就是生命周期的每个阶段(phase)都是有顺序的,后面的阶段依赖于前面的阶段。
这样可以大大简化命令行的输入。
l validate:验证工程是否正确,所有需要的资源是否可用。
l compile:编译项目的源代码。
l test:使用合适的单元测试框架来测试已编译的源代码。这些测试不需要已打包和布署。
l package:把已编译的代码打包成可发布的格式,比如jar。
l integration-test:如有需要,将包处理和发布到一个能够进行集成测试的环境。
l verify:运行所有检查,验证包是否有效且达到质量标准。
l install:把包安装到maven本地仓库,可以被其他工程作为依赖来使用。
l deploy:在集成或者发布环境下执行,将最终版本的包拷贝到远程的repository,使得其他的开发者或者工程可以共享。
Default生命周期是Maven最重要的生命周期,绝大部分的操作都在这个生命周期里面执行,这个周期定义了真正构件时所需要执行的所有步骤,是Maven生命周期中最核心的部分。关于每个步骤的详细解释,可以参考Maven的官网。
http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html
l pre-site:生成项目站点之前需要完成的工作
l site:生成项目站点文档
l post-site:生成项目站点之后需要完成的工作
l site-deploy:将项目站点发布到服务器
具体是怎么绑定的,接下来我们就详细了解一下。我们知道,Maven的生命周期是抽象的,它本身并不做任何工作,实际的工作都是交由插件来完成的。而Maven的生命周期的每个阶段(Phase)可以绑定一个或者多个插件,而且,Maven为每个阶段绑定了默认的插件,这才有了我们一个简单的mvn命令就可以打包的功能。
首先来看一下内置的缺省的绑定插件,如下所示:
Clean阶段的缺省插件绑定
在clean生命周期,只为clean这个phase绑定了插件,其余的则没有绑定,但是用户可以自行绑定。
Default阶段的缺省插件绑定
Site阶段的插件绑定
除了上述的默认绑定的插件,我们还可以显式地给每个Phase绑定我们的自定义插件,关于这个自定义插件绑定,我会在下一篇文章中详细讨论。
1、Maven插件机制
在默认的情况下,Maven是不会生成Jar包或者War包的,所以,如果我们需要把项目打成Jar包或者War包,就需要借助Maven的plugin了。先说说怎么打成Jar包,如果我们想利用Maven把项目打成Jar包,就需要使用maven-jar-plugin这个插件。
同理,打成War包则需要maven-war-plugin插件。接下来就详细说说怎么使用这两个插件,在使用插件之前,我们有必要了解一下Maven的插件机制。
学过Maven的同学都知道Maven生命周期(Lifecycle)的概念,在生命周期的每个阶段,Maven都会去做不同的工作,例如测试、连接、编译、打包等等。但是,你可能不知道的是,这些工作实际上都是由插件来完成的,事实上Maven生命周期是抽象的,它本身几乎不做任何工作,在生命周期的每个阶段,都是由一些具体的默认的插件来完成的。
说到这里,你可能明白了一点。Maven的生命周期就如同Java中的接口(Interface)一样,规定了对外的操作的一套动作。但是具体的实现,则是由插件来完成的。
综上,我们可以看出,Maven在运行时会按照一定的生命周期进行,每个周期都包括一些具体的执行阶段叫Phase,在每个阶段(Phase),maven会去查看环境(即pom.xml)中配置了哪些插件,然后运行它,这就是Maven的插件机制。
Maven通过插件来完成具体的任务,也就是说项目的每一个build步骤都可以绑定一个或多个插件,而且Maven的大多数build步骤都绑定了默认的插件,例如针对编译的插件有maven-compiler-plugin,针对测试的插件有maven-surefire-plugin等,甚至在遇到一些特殊的需求时,用户可以配置插件定制build行为,也可以自己编写插件。
关于Maven的生命周期,不懂的同学可以看看Maven官网上的介绍,在此就不再赘述了,关于Maven生命周期,请访问:
http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html
然后自己详细研究。
2、Maven的生命周期(Lifecycle)
在第一章提到过Maven生命周期的概念,本章继续来讲解Maven的生命周期。为了更好地使用和配置我们的插件,我们必须对Maven的生命周期有一个详细的了解,正如我前面所说的,Maven的生命周期和插件是绑定在一起的,用以完成实际的构建任务。这真是我们要了解和熟悉Maven生命周期的原因。
实际上,说Maven的生命周期和插件是绑定在一起的,并不是十分准确。更具体地说,是生命周期的具体阶段(Phase)和插件的目标(Goal)绑定在一起。
Maven的生命周期(Lifecycle)是由多个阶段(phase)组成的,每个阶段(phase)会绑定一个或者多个Goal,Goal是Maven里面最小任务执行单元,相当于Ant里面的target和Gradle里面的Task。
Maven的生命周期有三套,这三套生命周期是相互独立的,分别是clean、default、site。
其中,clean是清理项目的生命周期,主要是在进行项目构建之前执行一些清理工作,例如清除target文件夹下面的资源和文件等等。
default是构建项目的生命周期,这个是我们最常用的,也是用的最多的生命周期,主要执行项目的构建,包括项目的测试、编译、打包和部署等等。
site是建立项目站点的生命周期,主要是生成项目报告、站点和部署站点等等。
接下来,我们就来详细说说每个具体的生命周期,以及每个生命周期里面包含哪些Phase,怎么把Phase和Goal进行绑定等等。
3、Clean生命周期
Clean生命周期一共包含了三个阶段,分别如下:l pre-clean 执行一些需要在clean之前完成的工作
l clean 移除所有上一次构建生成的文件
l post-clean 执行一些需要在clean之后立刻完成的工作
mvn clean 中的clean就是上面的clean,在一个生命周期中,运行某个阶段的时候,它之前的所有阶段都会被运行,也就是说,mvn clean 等同于 mvn pre-clean clean ,如果我们运行 mvn post-clean ,那么 pre-clean,clean 都会被运行。这是Maven很重要的一个规则,就是生命周期的每个阶段(phase)都是有顺序的,后面的阶段依赖于前面的阶段。
这样可以大大简化命令行的输入。
4、Default生命周期
在default生命周期阶段,主要执行的是一些构建项目的工作,重要的phase如下所示:l validate:验证工程是否正确,所有需要的资源是否可用。
l compile:编译项目的源代码。
l test:使用合适的单元测试框架来测试已编译的源代码。这些测试不需要已打包和布署。
l package:把已编译的代码打包成可发布的格式,比如jar。
l integration-test:如有需要,将包处理和发布到一个能够进行集成测试的环境。
l verify:运行所有检查,验证包是否有效且达到质量标准。
l install:把包安装到maven本地仓库,可以被其他工程作为依赖来使用。
l deploy:在集成或者发布环境下执行,将最终版本的包拷贝到远程的repository,使得其他的开发者或者工程可以共享。
Default生命周期是Maven最重要的生命周期,绝大部分的操作都在这个生命周期里面执行,这个周期定义了真正构件时所需要执行的所有步骤,是Maven生命周期中最核心的部分。关于每个步骤的详细解释,可以参考Maven的官网。
http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html
5、Site生命周期
在site生命周期阶段,主要执行一些建立和发布站点的工作,主要的phase如下所示:l pre-site:生成项目站点之前需要完成的工作
l site:生成项目站点文档
l post-site:生成项目站点之后需要完成的工作
l site-deploy:将项目站点发布到服务器
6、Goal与插件绑定
前面说到,Maven生命周期的每个阶段是和插件的Goal绑定在一起的,用以执行每个阶段的构建任务。具体是怎么绑定的,接下来我们就详细了解一下。我们知道,Maven的生命周期是抽象的,它本身并不做任何工作,实际的工作都是交由插件来完成的。而Maven的生命周期的每个阶段(Phase)可以绑定一个或者多个插件,而且,Maven为每个阶段绑定了默认的插件,这才有了我们一个简单的mvn命令就可以打包的功能。
首先来看一下内置的缺省的绑定插件,如下所示:
Clean阶段的缺省插件绑定
生命周期阶段 | 插件目标 |
pre-clean | |
clean | maven-clean-plugin:clean |
post-clean |
Default阶段的缺省插件绑定
生命周期阶段 | 插件目标 | 执行任务 |
process-resources | maven-resources-plugin:resources | 复制主资源文件至主输出目录 |
compile | maven-compile-plugin:compile | 编译主代码至主输出目录 |
process-test-resources | maven-resources-plugin:testRresources | 复制测试资源文件至测试输出目录 |
test-compile | maven-compiler-plugin:testCompile | 编译测试代码至测试输出目录 |
test | maven-surefire-plugin:test | 执行测试用例 |
package | maven-jar-plugin:jar | 创建项目jar包 |
install | maven-install-plugin:install | 将项目输出构件安装到本地仓库 |
deploy | maven-deploy-plugin:deploy | 将项目输出构件部署到远程仓库 |
生命周期阶段 | 插件目标 |
pre-site | |
site | maven-site-plugin:site |
post-site | |
site-deploy | maven-site-plugin:deploy |
相关文章推荐
- Maven生命周期(插件)
- 7 Maven-生命周期和插件
- maven详解之生命周期与插件(二)
- Maven插件(plugin)goal的执行与生命周期(lifecycle)phase的关系
- maven插件的生命周期的详细说明(两)
- (十二)Maven生命周期和插件
- Maven的生命周期和插件(五)
- Maven进阶篇之Maven的生命周期和插件
- maven的生命周期,插件介绍(二)
- 项目构建之maven篇:6.生命周期与插件
- Maven生命周期和插件
- 第9章 maven的插件和生命周期
- Maven--生命周期和插件(四)
- Maven系列学习(5)-生命周期及插件
- Maven入门指南⑦:Maven的生命周期和插件
- Maven入门指南⑦:Maven的生命周期和插件
- maven的生命周期和插件
- Maven生命周期和插件
- maven(5)生命周期及插件
- maven详解之生命周期与插件