生命周期和插件

生命周期和插件是maven的两个核心概念,一次mvn命令的执行就对应了一次生命周期。而生命周期是一个抽象的概念,他的具体实现都需要插件来完成。

生命周期

maven有三套相互独立的生命周期:clean,default和site。

  • clean:目的是清理项目(pre-clean、clean、post-clean)
  • default: 目的是构建项目(validate、compile、test、package、verify、install、deploy)
  • site:目的是建立项目站点 (pre-site、site、post-site、site-deploy)
生命周期 阶段(phase) 内置插件: Goal 说明
clean pre-clean - 执行清理前需要完成的工作
clean clean maven-clean-plugin:clean 执行清理前需要完成的工作
clean post-clean - 执行清理后需要完成的工作
default vaildate - 验证,确保当前配置和POM内容是有效的,包含对POM文件树的验证。
default intianlize - 初始化,执行构建生命周期的主任务之前的初始化
default generate-sources - 生成源码,代码生成器生成后期阶段中处理或编译的源代码
default proccess-sources - 处理源码,提供解析、修改和转换源码。常规源码和生成的源码都可以再这里处理
default generate-resoureces - 生成资源,生成非源码资源,通常包括元数据文件和配置文件执行清理前需要完成的工作
default process-resources maven-resources-plugin:resources 处理资源,处理非源码资源,修改、转换和重定位资源都能在这阶段发生
default compile maven-compiler-plugin:compile 编译,编译源码。编译过的类被放到目标目录树中
default generate-resoureces - 处理类,处理类文件转换和增强步骤。字节码交织器和常用工具常在这一阶段操作
default generate-test-sources - 生成测试源码,生成要操作的单元测试代码
default process-test-sources - 处理测试源码,在编译前对测试源码执行任何必要的处理。修改、转换或复制源代码
default generate-test-resources - 生成测试资源,生成与测试相关的非源码资源
default process-test-resources maven-resources-plugin:testResources 处理测试资源,处理、转换或重新定位于测试相关的资源
default test-compile maven-compiler-plugin:testCompile 测试编译,编译单元测试的源码
default process-test-classes - 处理测试类,对编译生成文件做后期处理(Maven2.0.5及以上)
default test maven-surefire-plugin:test 测试,运行编译过的单元测试并累计结果
default prepare-package - 执行打包前的所有操作(Maven2.1及以上)
default package maven-jar-plugin:jar 打包,将可执行的二进制文件打包到一个分布式归档文件中,如jar或war
default pre-integration-test - 前集成测试,准备集成测试,将归档文件部署到一个服务器上执行
default integration-test - 集成测试,执行真正的集成测试,指在一个受到一定控制的模拟的真实部署环境中测试代码
default post-integration-test - 后集成测试,解除集成测试准备,涉及环境重置或重新初始化
default verify - 检验,检验可部署归档文件的有效性和完整性,通过后,将安装该归档
default install maven-install-plugin:install 安装,将项目包安装到本地仓库,供其他项目依赖
default deploy maven-deploy-plugin:deploy 部署,将项目发布到远程仓库,供其他开发人员与项目共享
site pre-site - 执行一些在生成项目站点之前需要完成的工作
site site maven-site-plugin:site 生成项目站点文档
site peo-site - 执行一些在生成项目站点之后需要完成的工作
site site-deploy maven-site-plugin:deploy 将生成的项目站点发布到服务器上

命令执行生命周期

一个mvn可以可以对应一次生命周期,但是mvn命令的不同对应了不同的生命周期。
mvn clean 仅执行clean生命周期的pre-clean和clean阶段
mvn test 仅执行default生命周期的validate、compile、test阶段
mvn clean 执行clean生命周期的pre-clean和clean阶段以及default生命周期的validate、compile、test、package阶段

插件

Maven的核心仅定义了抽象的生命周期,具体的任务是交由插件完成,插件以独立的构件形式存在。
一个插件往往具备多个功能,而每个功能对应着一个插件目标(Goal)。

生命周期的阶段和插件目标的绑定

为了减少用户的配置,maven给一些主要的生命周期阶段绑定了很多插件的目标,maven clean生命周期的clean阶段绑定了maven-clean-plugin的clean目标,当执行mvn clean时就会调用maven-clean-plugin的clean目标,这些都属于内置的绑定。
当然用户可以自己定义绑定,例如可以将maven-source-plugin的jar-no-fork目标(将项目的主代码打包成jar文件)绑定到default生命周期的verify阶段上。

<bulid>
<plugins>
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-source-plugin</artifactId>
    <version>2.1.1</version>
    <executons>
      <execution>
        <id>attach-sources</id>
        <phase>verify</phase>
        <goals>
          <goal>jar-no-fork</goal>
        </goals>
      </execution>
    </executons>
  </plugin>
</plugins>
</bulid>

执行插件目标

mvn 插件前缀 : 目标(例如:maven-help-plugin插件,help为插件前缀)
可以调用插件的某个目标来执行某个任务

插件

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 210,978评论 6 490
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 89,954评论 2 384
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,623评论 0 345
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,324评论 1 282
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,390评论 5 384
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,741评论 1 289
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,892评论 3 405
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,655评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,104评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,451评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,569评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,254评论 4 328
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,834评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,725评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,950评论 1 264
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,260评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,446评论 2 348

推荐阅读更多精彩内容

  • 生命周期是maven的又一大核心,maven的生命周期是抽象的,而实际行为都是以插件的方式来完成的,下面我将对生命...
    小炼君阅读 1,198评论 0 50
  • Maven的所有实际操作都是由插件完成的,如果没有插件,Maven什么都不会干。(即时你没有在POM中配置 元素,...
    Liam666阅读 256评论 0 1
  • 一、生命周期和插件的关系maven的生命周期是为了对所有的构建过程进行抽象和统一,总结的一套高度完善的、易扩展的生...
    lynnzhangcsh阅读 219评论 0 0
  • 一、什么是生命周期 Maven的生命周期包括项目的清理、初始化、编译、测试、打包、集成测试、验证、部署和站点生产等...
    JarvisTH阅读 333评论 0 0
  • Maven的生命周期是对所有构建过程的抽象和统一。包含了项目的清理、初始化、编译、测试、打包、集成测试、验证、部署...
    洛杨凡阅读 314评论 0 0