一个完整的项目构建过程通常包括清理、编译、测试、打包、集成测试、验证、部署等步骤,Maven从中抽取了一套完善的、易扩展的生命周期。Maven的生命周期是抽象的,其中的具体任务都交由插件来完成。Maven为大多数构建任务编写并绑定了默认的插件,如针对编译的插件:maven-compiler-plugin。用户也可自行配置或编写插件。

1 . 三套生命周期

  Maven定义了三套生命周期:clean、default、site,每个生命周期都包含了一些阶段(phase)。三套生命周期相互独立,但各个生命周期中的phase却是有顺序的,且后面的phase依赖于前面的phase。执行某个phase时,其前面的phase会依顺序执行,但不会触发另外两套生命周期中的任何phase。

1 . 1 clean生命周期

  1. pre-clean    :执行清理前的工作;
  2. clean    :清理上一次构建生成的所有文件;
  3. post-clean    :执行清理后的工作

1 . 2 default生命周期

default生命周期是最核心的,它包含了构建项目时真正需要执行的所有步骤。

  1. validate
  2. initialize
  3. generate-sources
  4. process-sources
  5. generate-resources
  6. process-resources    :复制和处理资源文件到target目录,准备打包;
  7. compile    :编译项目的源代码;
  8. process-classes
  9. generate-test-sources
  10. process-test-sources
  11. generate-test-resources
  12. process-test-resources
  13. test-compile    :编译测试源代码;
  14. process-test-classes
  15. test    :运行测试代码;
  16. prepare-package
  17. package    :打包成jar或者war或者其他格式的分发包;
  18. pre-integration-test
  19. integration-test
  20. post-integration-test
  21. verify
  22. install    :将打好的包安装到本地仓库,供其他项目使用;
  23. deploy    :将打好的包安装到远程仓库,供其他项目使用;

1 . 3 site生命周期

  1. pre-site
  2. site    :生成项目的站点文档;
  3. post-site
  4. site-deploy    :发布生成的站点文档

2 . Maven的插件

Maven的核心文件很小,主要的任务都是由插件来完成。定位到:%本地仓库%\org\apache\maven\plugins,可以看到一些下载好的插件:

Maven官网上有更详细的官方插件列表:

2 . 1 插件的目标(Plugin Goals)

一个插件通常可以完成多个任务,每一个任务就叫做插件的一个目标。如执行mvn install命令时,调用的插件和执行的插件目标如下:

每个插件都有哪些个目标,官方文档有更详细的说明:Maven Plugins

3 . 将插件绑定到生命周期

  Maven的生命周期是抽象的,实际需要插件来完成任务,这一过程是通过将插件的目标(goal)绑定到生命周期的具体阶段(phase)来完成的。如:将maven-compiler-plugin插件的compile目标绑定到default生命周期的compile阶段,完成项目的源代码编译:

3 . 1 内置的绑定

  Maven对一些生命周期的阶段(phase)默认绑定了插件目标,因为不同的项目有jar、war、pom等不同的打包方式,因此对应的有不同的绑定关系,其中针对default生命周期的jar包打包方式的绑定关系如下:

第二列中,冒号后面即是绑定的插件目标,冒号前面是插件的前缀(prefix),是配置和使用插件的一种简化方式。Plugin Prefix

3 . 2 自定义绑定

  用户可以根据需要将任何插件目标绑定到任何生命周期的阶段,如:将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>

4 . 配置插件

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>

也可以对插件的各个目标进行更具体的配置。Configuring Plug-ins

5 . 插件仓库

跟其他构件一样,插件也是根据坐标存储在Maven仓库中。超级POM中Maven配置的默认插件远程仓库如下:

<pluginRepositories>
<pluginRepository>
<id>central</id>
<name>Central Repository</name>
<url>http://repo.maven.apache.org/maven2</url>
<layout>default</layout>
<snapshots>
<enabled>false</enabled>
</snapshots>
<releases>
<updatePolicy>never</updatePolicy>
</releases>
</pluginRepository>
</pluginRepositories>

http://www.cnblogs.com/luotaoyeah/p/3819001.html

最新文章

  1. Android开发中Eclispe相关问题及相应解决(持续更新)
  2. 常用的SQL 语句
  3. k-d tree 学习笔记
  4. EvreryDay Collect
  5. vcffilter 工具bug以及解决办法
  6. Flume Spooldir 源的一些问题
  7. Robot Framework 项目搭建
  8. activemq的两种基本通信方式的使用及总结
  9. query 原理
  10. Unity Shader 知识点总结(一)
  11. Kubernetes之POD
  12. [转]Visual Studio 2015源文件编码问题(936)
  13. d3 数学方法(伪随机数生成器 )
  14. Mybatis源码分析之SqlSession和Excutor(二)
  15. ThreadLocal Java并发
  16. UVA 103
  17. Ceph 块设备 - 命令,快照,镜像
  18. Tensorflow踩坑之tf.nn.bidirectional_dynamic_rnn()报错 “ValueError: None values not supported.”
  19. 在VS2008中使用WSE 3.0【转】
  20. phpstorm 不能提示代码tp 3.2 $this-&gt;display等 解决办法

热门文章

  1. java并发学习--第三章 线程安全问题
  2. MyBatis体系学习总览
  3. 01.python对象
  4. Dubbo学习-1-基础知识
  5. ht-5 treemap特性
  6. JDK1.8 红黑树
  7. B/S选择文件夹上传
  8. 【CF1243B2】Character Swap (Hard Version)【思维】
  9. 【转】通过Nginx部署Django
  10. 使用PHPExcel操作Excel用法实例分析