Maven的生命周期就是对全部的构建过程进行抽象和统一。包含了项目的清理、初始化、编译、测试、打包、集成测试、验证、部署和站点生成等几乎全部的构建步骤。html
Maven的生命周期是抽象的,即生命周期不作任何实际的工做,实际任务由插件完成,相似于设计模式中的模板方法。apache
Maven定义了三套生命周期:clean、default、site,每一个生命周期都包含了一些阶段(phase)。三套生命周期相互独立,但各个生命周期中的phase倒是有顺序的,且后面的phase依赖于前面的phase。执行某个phase时,其前面的phase会依顺序执行,但不会触发另外两套生命周期中的任何phase。设计模式
各个生命周期相互独立,一个生命周期的阶段先后依赖。服务器
一、mvn clean框架
调用clean生命周期的clean阶段,实际执行pre-clean和clean阶段maven
二、mvn testpost
调用default生命周期的test阶段,实际执行test以及以前全部阶段单元测试
三、mvn clean install测试
调用clean生命周期的clean阶段和default的install阶段,实际执行pre-clean和clean,install以及以前全部阶段ui
maven的核心文件很小,主要的任务都是由插件来完成。定位到:%本地仓库%\org\apache\maven\plugins,能够看到一些下载好的插件
Maven的生命周期是抽象的,实际须要插件来完成任务,这一过程是经过将插件的目标(goal)绑定到生命周期的具体阶段(phase)来完成的。如:将maven-compiler-plugin插件的compile目标绑定到default生命周期的compile阶段,完成项目的源代码编译:
一个插件一般能够完成多个任务,每个任务就叫作插件的一个目标。如执行mvn install命令时,调用的插件和执行的插件目标以下:
前面的即为插件,后面的即为插件的目标.每一个插件都有哪些个目标,官方文档有更详细的说明:Maven Plugins
用户能够根据须要将任何插件目标绑定到任何生命周期的阶段,如:将maven-source-plugin的jar-no-fork目标绑定到default生命周期的package阶段,这样,之后在执行mvn package命令打包项目时,在package阶段以后会执行源代码打包,生成如:ehcache-core-2.5.0-sources.jar形式的源码包
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-source-plugin</artifactId> <version>2.2.1</version> <executions> <execution> <id>attach-source</id> <phase>package</phase><!-- 要绑定到的生命周期的阶段 --> <goals> <goal>jar-no-fork</goal><!-- 要绑定的插件的目标 --> </goals> </execution> </executions> </plugin> </plugins> …… </build>
同时也能够修改默认绑定的插件参数.如:在上图执行mvn install命令时 maven-surefire-plugin:2.7.2:test
插件就对咱们编写的单元测试进行测试,为了跳过单元测试,可修改该插件的参数跳过单元测试.
<build> <plugins> <!--打包时跳过单元测试--> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.18.1</version> <configuration> <skipTests>true</skipTests><!--true 跳过单元测试--> </configuration> </plugin> ... </plugins>
Maven插件高度易扩展,能够方便的进行自定义配置。如:配置maven-compiler-plugin插件编译源代码的JDK版本为1.7:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.7</source> <target>1.7</target> </configuration> </plugin>