`
reniaL
  • 浏览: 93480 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Maven的生命周期

阅读更多

Maven 用了一段时间。每当遇到问题去查阅资料时,总能在各种特性和插件中找到满意的,甚至是超出预期的答案(这种感觉在用 Sonar 时也有),Maven 的强大可见一斑。

初学 Maven 时,即遇到“生命周期 (Lifecycle)”这个词,但之前原来一直有些误解,直到最近才完全弄懂相关的含义,这里说一说。目前 Maven 的最新版本为 3.0.4,本文相关内容都基于该版本。

 

Lifecycle

Lifecycle 定义了构建项目的流程。这里的“定义”其实是预定义(不知是否能自定义?),Maven 预定义了三种 lifecycle:

 

  • clean
  • default
  • site

顾名思义,clean 用于清理项目,default 则是构建项目的标准流程(编译、打包、部署等),site 能生成项目的文档。每个 lifecycle 包含了一个 phase 列表,例如 clean 包含了 pre-clean、clean、post-clean 三个 phase,而 default 则包含了 compile、package、deploy 等二十三个 phase。

 

Phase

Phase 的定义是比较容易让人误解的,特别是如果你之前用过 Ant。Phase 乍看上去很像 Ant 的 target,但二者其实有一个关键的不同点:

 

  •     Ant 的 target 本身已经包含了任务信息,一个 target 执行什么任务是固定的
  •     Maven 的 phase 本身不包含任何任务信息,而是通过绑定 goal 来执行任务

用编程来打比方,target 就像一个普通的实现方法,而 phase 则是一个接口定义。例如,Maven 希望 compile 这个 phase 就做编译项目的任务,并且也给出了一个默认实现,但我们可以有自己的实现,在运行 compile 时想干嘛干嘛。

 

Goal

那如何控制 phase 的实现呢?就是通过绑定 goal 来控制的。Goal 是由插件定义的,一个插件可以定义多个 goal,例如 compiler 插件定义了 compile、testCompile 和 help 三个 goal。一个 goal 定义了一个操作,例如编译代码、复制资源文件、打包项目等。在配置插件时,可以将一个 goal 绑定到一个或多个 phase,这样在运行这个 phase 时就会运行绑定的 goal 了。

Maven 默认会有一些 phase - goal 绑定,这个默认值根据项目的打包方式 (POM 中的 <packaging>) 不同而有所不同,例如打包方式为 war 的项目,默认有以下 phase - goal 绑定:

 

  • process-resources         resources:resources
  • compile                   compiler:compile
  • process-test-resources    resources:testResources
  • test-compile              compiler:testCompile
  • test                      surefire:test
  • package                   war:war
  • install                   install:install
  • deploy                    deploy:deploy

最后,举个例子总结。当我们运行 mvn package 命令构建项目时,Maven 的处理步骤如下:

 

  • 由 package 这个 phase 确定当前的生命周期为 default
  • 从 default 生命周期的第一个 phase 开始,按顺序运行至 package 这个 phase
  • 运行某个特定 phase 时,如果有绑定 goal,则运行这些 goal。如果没有绑定 goal,则跳过当前 phase

更详细的信息,可参考 Lifecycle

2
5
分享到:
评论

相关推荐

    关于 maven生命周期 最新 最全

    Maven生命周期 最新版 最全 最好用

    Maven 生命周期.pdf

    附件详细的阐述了Maven中生命周期概念的理解,对于在开发过程中熟练的使用Maven大有脾益

    大话Maven生命周期

    Maven非常强大的重要原因是它有十分完善的生命周期模型 lifecycle 这个生命周期可以从两方面来理解 第一 顾名思义 运行Maven的每个步骤都由它来定义的 这种预定义的默认行为使得我们使用Maven变得简单 相比而言 Ant...

    maven生命周期

    Maven有三套相互独立的生命周期,请注意这里说的是“三套”,而且“相互独立”,初学者容易将Maven的生命周期看成一个整体,其实不然。

    Maven生命周期和及插件原理用法详解

    主要介绍了Maven生命周期和及插件原理用法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值的相关资料

    Eclipse整合Maven开发教程

    4.2 Maven生命周期 13 4.3 Run As 15 4.4 Maven Build(compile) 16 4.5 Maven Build(package) 16 4.6 Maven Install(安装) 17 4.7 Maven Clean 18 4.8 新建Web工程 18 4.9 运行Web工程 19 5. 依赖...

    Maven3实战笔记04Maven的生命周期和插件

    Maven3实战笔记04——Maven的生命周期和插件。

    Maven的生命周期阶段.docx

    Maven的生命周期就是对所有的构建过程进行抽象和统一。包含了项目的清理、初始化、编译、测试、打包、集成测试、验证、部署和站点生成等几乎所有的构建步骤。 Maven的生命周期是抽象的,即生命周期不做任何实际的...

    Maven权威指南 很精典的学习教程,比ANT更好用

    Maven生命周期 (Lifecycle) 3.5.3. Maven坐标 (Coordinates) 3.5.4. Maven仓库(Repositories) 3.5.5. Maven依赖管理 (Dependency Management) 3.5.6. 站点生成和报告 (Site Generation and Reporting) 3.6. ...

    Maven权威指南中文版(完整)

    3.5.2. Maven生命周期 (Lifecycle) .......................... 26 3.5.3. Maven坐标 (Coordinates) ............................ 32 3.5.4. Maven仓库(Repositories) ............................ 34 3.5.5. ...

    maven的使用

    想了解maven了,相关maven常用命令、maven生命周期、maven加速

    Maven的生命周期和插件

    NULL 博文链接:https://576017120.iteye.com/blog/1468915

    版本管理及项目构建和maven的介绍使用

    1.svn版本管理。 2.项目构建的方式,主要介绍Ant和maven,...包含Ant的简介及常用任务,maven的简介、环境配置、maven项目开发,maven依赖、maven仓库等概念以及maven生命周期和maven插件、聚合和继承等。 3.推荐的书籍

    chm版本Maven教程

    Maven 构建生命周期 Maven 构建配置文件 Maven存储库 Maven插件 Maven创建Java项目 使用Maven构建和测试Java项目 Maven外部依赖 Maven项目文档 Maven项目模板 Maven快照 Maven构建自动化 Maven依赖管理 Maven自动化...

    Maven 构建生命周期

    Maven 构建生命周期 Maven 构建生命周期定义了一个项目构建跟发布的过程。 一个典型的 Maven 构建(build)生命周期是由以下几个阶段的序列组成的: 阶段 处理 描述 验证 validate 验证项目 验证项目是否...

    Maven构建生命周期详细介绍

    主要介绍了Maven构建生命周期详细介绍,小编觉得还是挺不错的,这里分享给大家,需要的朋友可以参考下。

    wiremock-maven-plugin:WireMock Maven插件

    WireMock Maven插件 在Maven生命周期中运行WireMock。5.0.0及更高版本中的新功能5.0.0之前的WireMock Maven插件的每个版本都与WireMock本身的特定版本捆绑在一起。 这导致WireMock Maven插件必须在每次发布WireMock...

    maven3.2.5安装包下载

    Maven包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System)。 安装步骤 先下载,下载完成后,解压到某个目录  ...

Global site tag (gtag.js) - Google Analytics