Maven是一个优秀的项目管理工具,它能够帮你管理编译、报告、文档等。

Maven的生命周期:

maven的生命周期是抽象的,它本身并不做任何的工作。实际的工作都交由"插件"来完成。

maven的每个构建步骤都可以绑定一个或多个插件行为,而且maven为大多数的构建步骤编写并绑定了默认插件。

三套生命周期:clean、default、site

clean: 主要目的是清理项目

  • pre-clean: 执行一些清理前需要完成的工作
  • clean: 清理上一次构建生成的文件
  • post-clean: 执行一些清理后需要完成的工作

default:定义了真正构建时所需要执行的所有步骤,它是生命周期中最核心的部分

  • validate
  • initialize
  • generate-sources
  • process-sources: 处理项目主资源文件。一般来说,是对src/main/resources目录的内容进行变量替换等工作后,复制到项目输出的主classpath目录中
  • generate-resources
  • process-resources
  • compile: 编译项目的主源码。一般来说,是编译src/main/Java目录下的Java文件至项目输出的主classpath目录中
  • process-classes
  • generate-test-sources
  • process-test-sources: 处理项目测试资源文件。一般来说,是对src/test/resources目录的内容进行变量替换等工作后,复制到项目输出的测试classpath目录中
  • generate-test-resources
  • process-test-resources
  • test-compile: 编译项目的测试代码,一般来说,是编译src/test/java目录下的Java文件至项目输出的测试classpath目录中
  • process-test-classes
  • test: 使用单元测试框架运行测试,测试代码不会打包或部署
  • prepare-package
  • package: 接受编译好的代码,打包成可发布的格式,如JAR
  • pre-integration-test
  • integration-test
  • post-integration-test
  • verify
  • install: 将包安装到Maven本地仓库,供本地其他Maven项目使用
  • deploy: 将最终的包复制到远程仓库,供其他开发人员和Maven项目使用

site生命周期: 建立和发布项目站点,Maven能够基于POM所包含的信息,自动生成站点

  • pre-site: 执行一些在生成项目站点之前需要完成的工作
  • site: 生成项目站点文档
  • post-site: 执行一些在生成项目站点之后需要完成的工作
  • site-deploy: 将生成的项目站点发布到服务器上

Maven的生命周期的各个阶段是前后阶段相互依赖的,当用户调用clean的时候,pre-clean 和 clean阶段会顺序执行,不会碰触default的任何阶段。

在命令行中的复杂调用和生命周期各个阶段的执行情况:

从三个例子来说明:

  1. $mvn test : 该命令调用default生命周期的 test 阶段。实际执行的阶段为default生命周期的validate到test的所有阶段
  2. $mvn clean install : 该命令调用clean生命周期的clean阶段和default生命周期的install阶段。实际执行的是clean生命周期的pre-clean、clean阶段和default生命周期的validate到install的所有阶段。该命令结合了两个生命周期,是执行真正项目构建之前清理项目的一个很好的实践。
  3. $mvn clean deploy site-deploy : 该命令调用了clean生命周期的clean阶段和default生命周期的deploy阶段,以及site生命周期的site-deploy阶段。实际执行的是clean生命周期的pre-clean、clean阶段和default生命周期的所有阶段,以及site生命周期的所有阶段。

Maven的插件

Maven的核心分发包只有不到3MB的大小,Maven会在需要的时候下载并使用插件,对于插件本身,为了能够复用代码,它往往能够完成多个任务。Maven的生命周期与插件相互绑定,用以完成实际的构建任务。具体而言是生命周期的阶段与插件的目标相互绑定,以完成某个具体的构建任务。

内置绑定

Maven在核心为一些主要的生命周期阶段绑定了很多插件的目标

clean生命周期阶段与插件目标的绑定关系

生命周期阶段 插件目标
pre-clean  
clean maven-clean-plugin:clean
post-clean  

site生命周期阶段与插件目标的绑定关系

生命周期阶段 插件目标
pre-site  
site maven-site-plugin:site
post-site  
site-deploy maven-site-plugin:deploy

default生命周期与内置插件绑定关系及具体任务(打包类型: jar)

生命周期阶段 插件目标 执行任务
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 将项目输出构件部署到远程仓库
 
 

最新文章

  1. 完整部署CentOS7.2+OpenStack+kvm 云平台环境(5)--问题解决
  2. Bridge.NET
  3. [Xamarin.iOS] Visual Studio中Xamarin.iOS项目,无法加入PCL项目参考、NuGet组件参考
  4. Linux大文件已删除,但df查看已使用的空间并未减少解决
  5. setTimeout()和setInterval() 何时被调用执行
  6. POJ 2992 求组合数的因子个数
  7. 如何查看Windows8.1计算机体验指数评分
  8. N个数字中随机取m个数子,不重复
  9. phpexcel 一些基本的设置 (表格的基本属性)
  10. String.Split()函数
  11. IOS UI 第十篇: UITABLEVIEW
  12. Kubernetes(k8s)容器运行时(CRI)
  13. 分享一款在线less转css的神器
  14. app接入网易严选:webview注入js的几个坑
  15. MySQL语法大全_自己整理的学习笔记(MySQL语句 整理二)
  16. PyCharm 设置Python 文件头部模板
  17. Oracle高级查询之OVER
  18. java nio 映射文件内容到内存
  19. 如何写一个简单的HTTP服务器(重做版)
  20. 执行Shell脚本的4种方法及区别介绍(转)

热门文章

  1. 教你建立SQL数据库的表分区
  2. iptables防火墙相关命令详解
  3. delphi 解决RichViewEdit乱码问题
  4. set实现数组去重后是对象,这里转化为数组
  5. CF 936C Lock Puzzle——构造
  6. BUUCTF | SQL COURSE 1
  7. Redis入门很简单之七【使用Jedis实现客户端Sharding】
  8. 105、TensorFlow的变量(一)
  9. C++怎样通过嵌入汇编写一个函数
  10. 哈希算法和字典类的定义,DataSet中数据遍历的几种方法