三、Maven抽象的项目生命周期和插件

在Maven出现之前,项目构建的生命周期就已经存在了,例如清理、编译、部署等操作。Maven的生命周期就是为了对所有的构建过程进行抽象和统一。Maven的生命周期是抽象的,这意味着生命周期本身不做任何实际的工作,在Maven的设计中,实际的任务都交给插件来完成。

一、三套生命周期

Maven拥有三套相互独立的生命周期,分别为clean、default、site。

  • 每个生命周期都包含一些有序的阶段, 并且后面的阶段依赖前面的阶段,用户和Maven最直接的交互方式就是调用这些生命周期阶段。
  • 三个生命周期是相互独立的,例如当用户调用clean生命周期的某个阶段,不会触发default生命周期的任何阶段,反之亦然,当用户调用default生命周期的时候,不会出发clean生命周期的任何阶段。
1.1 、clean生命周期(在进行真正的构建工作之前做一些清理的工作)
  • pre-clean:执行一些清理前需要完成的工作
  • clean:清理上一次构建的文件
  • post-clean:执行一些清理后需要完成的工作
1.2、default生命周期(构建的核心部分,编译、测试、打包、部署、发布等)
  • validate:验证该项目是正确的,并且确定所有必须的信息都是可用的
  • initialize:初始化构建状态,例如创建目标目录
  • generate-sources:生成要编译的任何源代码
  • process-source:处理源代码
  • generate-resources:生成要打包在包里的资源文件
  • process-resources:将资源文件处理并复制到目标文件夹
  • compile:编译项目主代码
  • process-classes:处理编译后的.class文件
  • generate-test-sources:如上
  • process-test-sources:如上
  • generate-test-resources:如上
  • process-test-resources:如上
  • test-compile:编译项目的测试代码
  • process-test-classes:如上
  • test:使用单元测试框架运行,测试代码不会被打包或部署
  • prepare-package:打包预处理
  • package:打包
  • pre-integration-test:继承测试之前准备
  • integration-test:集成测试
  • post-integration-test:集成测试后扫尾操作,例如清除运行时用到的环境变量
  • verify:检查是否打包标准且成功
  • install:将包安装在Maven本地仓库
  • deploy:将最终的包复制到远程仓库
1.3 site生命周期(生成项目报告、站点、发布站点)
  • pre-site:执行一些在生成项目站点之前的操作
  • site:生成项目站点文档
  • post-site:执行一些在生成项目站点之后需要完成的操作
  • site-deploy:将生成的项目站点发布到服务器上
二、命令行和生命周期
  • $mvn clean:执行clean生命周期的clean阶段
  • $ mvn test:执行default生命周期的test阶段,会从default生命周期的第一个阶段执行到test阶段
  • $mvn clean install:执行clean生命周期的clean阶段和default生命周期的install阶段
  • $mvn clean deploy site-deploy:执行clean生命周期的clean阶段,执行default生命周期的deploy阶段,执行site生命周期的site-deploy阶段

Maven命令的话基本就是mvn加生命周期,所以掌握Maven的生命周期,就会对Maven有一定的了解

三、插件目标

回顾文章开头所说:

  • Maven的核心仅仅时定义了抽象的生命周期
  • 具体的任务都是交给插件去完成的
  • 插件以独立的构件形式存在,所以Maven核心的分发包只有不到3M
  • Maven会在需要的时候下载并使用插件(类似引入依赖)

对于插件来说,它一般有多个功能,我们把插件的一个功能叫做插件的目标

四、插件绑定

Maven的生命周期与对应的插件相互绑定,用以完成实际的构建任务。具体来说时生命周期的阶段与插件的目标项目绑定。

例如default生命周期的compile这个阶段和maven-compile-plugin绑定

4.1 内置绑定

为了能让用户几乎不用任何配置就能构建Maven项目,Maven在核心为一些主要的生命周期阶段绑定了很多插件的目标,当用户通过命令行调用生命周期阶段的时候,对应的插件目标就会执行相应的任务

4.2 自定义绑定

因为Maven默认只提供了主要生命周期阶段的绑定插件,所以用户也可以通过配置将插件绑定在某个生命周期阶段得以执行。

五、插件的配置

插件的配置主要有两种方式:

  • 命令行插件配置:
    • Maven命令中使用-D参数,并伴随一个参数键=参数值的形式
    • 例如常用的mvn clean package -Dmaven.test.skip=true
  • POM文件配置
    • 配置插件的全局配置,如配置compile插件的编译版本
    • 为某个插件任务配置特定的参数
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,524评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,869评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,813评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,210评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,085评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,117评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,533评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,219评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,487评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,582评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,362评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,218评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,589评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,899评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,176评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,503评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,707评论 2 335

推荐阅读更多精彩内容

  • 生命周期是maven的又一大核心,maven的生命周期是抽象的,而实际行为都是以插件的方式来完成的,下面我将对生命...
    小炼君阅读 1,174评论 0 50
  • Maven聚合模块: 因为Maven是提倡模块化编程的,所以会以多个工程分为多个模块。如果所有的功能、模块都写在一...
    凯哥学堂阅读 745评论 0 4
  • 经过Maven生命周期的学习,我们知道在Maven core中仅仅定义了抽象的生命周期,具体的实现是由插件完成的,...
    SonyaBaby阅读 1,252评论 0 3
  • Maven生命周期详解 Maven——生命周期与插件 一、生命周期 Maven有三套相互独立的生命周期,请注意这里...
    晚歌歌阅读 948评论 0 1
  • 一、什么是生命周期 Maven的生命周期包括项目的清理、初始化、编译、测试、打包、集成测试、验证、部署和站点生产等...
    JarvisTH阅读 329评论 0 0