您的位置:首页 > 编程语言 > Java开发

Maven插件和生命周期

2017-03-19 00:00 197 查看
摘要: 浅谈Maven的插件机制和生命周期

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
在clean生命周期,只为clean这个phase绑定了插件,其余的则没有绑定,但是用户可以自行绑定。

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
将项目输出构件部署到远程仓库
Site阶段的插件绑定

生命周期阶段
插件目标
pre-site
site
maven-site-plugin:site
post-site
site-deploy
maven-site-plugin:deploy
除了上述的默认绑定的插件,我们还可以显式地给每个Phase绑定我们的自定义插件,关于这个自定义插件绑定,我会在下一篇文章中详细讨论。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息