Maven 有三个相互独立的生命周期:Clean 生命周期、build 生命周期、site 生命周期。

  • 各个构建环节执行的顺序:不能打乱顺序,必须按照既定的正确顺序来执行。
  • Maven 的核心程序中定义了抽象的生命周期,生命周期中各个阶段的具体任务是由插件来完成的。
  • Maven 核心程序为了更好的实现自动化构建,按照这一特点执行生命周期中的各个阶段:不论现在要执行生命周期中的哪一个阶段,都是从这个生命周期最初的位置开始执行。

Maven 构建的生命周期

Maven 构建生命周期定义了一个项目构建跟发布的过程。

一个典型的 Maven 构建(build)生命周期是由以下几个阶段的序列组成的:

阶段 处理 描述
验证 validate 验证项目 验证项目是否正确且所有必须信息是可用的
编译 compile 执行编译 源代码编译在此阶段完成
测试 Test 测试 使用适当的单元测试框架(例如JUnit)运行测试。
包装 package 打包 创建JAR/WAR包如在 pom.xml 中定义提及的包
检查 verify 检查 对集成测试的结果进行检查,以保证质量达标
安装 install 安装 安装打包的项目到本地仓库,以供其他项目使用
类比git commit
部署 deploy 部署 拷贝最终的工程包到远程仓库中,以共享给其他开发人员和工程
类比git push

为了完成 default 生命周期,这些阶段(包括其他未在上面罗列的生命周期阶段)将被按顺序地执行。

理解:大家可以粗略的认为Maven就是一个存放jar包的Git

它的deploy就相当于把整个文件打包成jar包,然后安装到本地仓库,部署上传到远程仓库。

使用的时候也只是把远程仓库的jar包拉取到本地,依赖使用。

注意:不要认为编译、测试、打包这些东西我们的编译器都可以做 Maven 就不需要了,Maven 在使用父工程将子模块进行聚合的时候,我们就需要这些东西来帮我们运行整个父工程,将子模块的功能整合起来运行。

如果需要查看jar包具体依赖了哪些包,可以考虑使用解压命令解压jar包,如jar -xvzf file.jarunzip file.jar等。


  • validate为了下面的compile操作进行的校验,保证代码是可以进行编译的,没有语法错误等异常

  • test为了下面的package操作进行的校验,保证代码是可以通过UT(Unit Test,单元测试)的,无误之后才会进行打包使用

  • verify为了下面的install操作进行的最终校验,保证代码集成之后测试质量达标,在执行验证之前,verify命令以顺序(验证,编译,包等)执行每个默认生命周期阶段。在大多数情况下,效果与package相同。但是,如果有集成测试,则这些也将执行。在verify阶段期间,可以完成一些额外的检查,例如,如果您的代码根据预定义的Checkstyle规则编写。(如 对jar包进行一些检查等

结论:如果您想运行集成测试并检查它,请使用验证。如果您只想运行单元测试,请使用测试。

我的个人建议:如果有疑问,请使用验证。


test和verify有什么区别?

First of all, when you run a Maven goal, it will run any previous goal. The order of basic phases is:

  • Validate
  • Compile
  • Test
  • Package
  • Verify
  • Install
  • Deploy

If you run Test, Maven will execute validate, compile and test. Based on this, the first point is that verify includes test.

Based on official documentation:

  • TEST - test the compiled source code using a suitable unit testing framework. These tests should not require the code be packaged or deployed
  • VERIFY - run any checks on results of integration tests to ensure quality criteria are met

To run unit tests, the Surefire plugin is recommended. And Failsafe for integration tests.

The verify command executes each default lifecycle phase in order (validate, compile, package, etc.), before executing verify. In most cases the effect is the same as package. However, in case there are integration tests, these will be executed as well. And during the verify phase some additional checks can be done, e.g. if your code is written according to the predefined checkstyle rules.

Conclusion: if you want to run your integration tests and check it, use verify. If you only want to run unit tests, use test.

My personal advice: if in doubt, use verify.

完整生命周期

Maven 有以下三个标准的生命周期:

  • clean:项目清理的处理
  • default(或 build):项目部署的处理
  • site:项目站点文档创建的处理

Clean 生命周期

清理:将以前编译器得到的旧的 class 字节码文件删除,为下一次编译做准备。

当我们执行 mvn post-clean 命令时,Maven 调用 clean 生命周期,它包含以下阶段:

pre-clean:执行一些需要在clean之前完成的工作

clean:移除所有上一次构建生成的文件

post-clean:执行一些需要在clean之后立刻完成的工作

clean

清除已经存在的目标文件target



也就是把这个文件删掉

Default (Build) 生命周期

这是 Maven 的主要生命周期,被用于构建应用,包括下面的 23 个阶段:

生命周期阶段 描述
validate(校验) 校验项目是否正确并且所有必要的信息可以完成项目的构建过程。
initialize(初始化) 初始化构建状态,比如设置属性值。
generate-sources(生成源代码) 生成包含在编译阶段中的任何源代码。
process-sources(处理源代码) 处理源代码,比如说,过滤任意值。
generate-resources(生成资源文件) 生成将会包含在项目包中的资源文件。
process-resources (处理资源文件) 复制和处理资源到目标目录,为打包阶段最好准备。
compile(编译) 编译项目的源代码。
process-classes(处理类文件) 处理编译生成的文件,比如说对Java class文件做字节码改善优化。
generate-test-sources(生成测试源代码) 生成包含在编译阶段中的任何测试源代码。
process-test-sources(处理测试源代码) 处理测试源代码,比如说,过滤任意值。
generate-test-resources(生成测试资源文件) 为测试创建资源文件。
process-test-resources(处理测试资源文件) 复制和处理测试资源到目标目录。
test-compile(编译测试源码) 编译测试源代码到测试目标目录.
process-test-classes(处理测试类文件) 处理测试源码编译生成的文件。
test(测试) 使用合适的单元测试框架运行测试(Juint是其中之一)。
prepare-package(准备打包) 在实际打包之前,执行任何的必要的操作为打包做准备。
package(打包) 将编译后的代码打包成可分发格式的文件,比如JAR、WAR或者EAR文件。
pre-integration-test(集成测试前) 在执行集成测试前进行必要的动作。比如说,搭建需要的环境。
integration-test(集成测试) 处理和部署项目到可以运行集成测试环境中。
post-integration-test(集成测试后) 在执行集成测试完成后进行必要的动作。比如说,清理集成测试环境。
verify (验证) 运行任意的检查来验证项目包有效且达到质量标准。
install(安装) 安装项目包到本地仓库,这样项目包可以用作其他本地项目的依赖。
deploy(部署) 将最终的项目包复制到远程仓库中与其他开发者和项目共享。

compile

编译项目,生成目标文件target,文件中都是编译出来的字节码文件

package

打包项目,生成jar包放在目标文件target中

install

在本地Repository中安装刚刚生成的jar包

deploy

将刚刚生成的jar包推送到远程Repository中

Site 生命周期

Maven Site 插件一般用来创建新的报告文档、部署站点等。

pre-site:执行一些需要在生成站点文档之前完成的工作

site:生成项目的站点文档

post-site:执行一些需要在生成站点文档之后完成的工作,并且为部署做准备

site-deploy:将生成的站点文档部署到特定的服务器上

这里经常用到的是site阶段和site-deploy阶段,用以生成和发布Maven站点,这可是Maven相当强大的功能,Manager比较喜欢,文档及统计数据自动生成,很好看。

【Maven】生命周期的更多相关文章

  1. Maven实战:Maven生命周期

    前言 之前有写过一篇文章Maven实战,介绍了Maven的一些基本概念,以及对于一个初学者而言的Maven基础知识,当时在我看来掌握了这些基本是够用的. 随着工作的深入,越来越感觉对于Maven的理解 ...

  2. (十二)Maven生命周期和插件

    除了坐标.依赖以及仓库之外,Maven的另外两个核心概念是生命周期和插件.在有关Maven的日常使用中,命令行的输入往往就对应了生命周期,如mvn package就表示执行默认生命周期阶段packag ...

  3. Maven生命周期小记

    1.Maven生命周期是为了所有的构建过程进行抽象和统一.Maven从大量的项目和构建工具中学习和反思,总结了一套高度完善.易扩展的生命周期.这个生命周期包含了项目的清理.初始化.编译.测试.打包.集 ...

  4. maven权威指南学习笔记(四)—— maven生命周期(lifecycle)

    定义: 生命周期是包含在一个项目构建中的一系列有序的阶段 举个例子来说就是maven 对一个工程进行: 验证(validate) -- 编译源码(compile) -- 编译测试源码(test-com ...

  5. maven生命周期和插件

    maven生命周期和插件 生命周期 maven的生命周期有三套,互相独立.每个生命周期含有不同阶段,常用如下 clean 清理项目 pre-clean 执行清理前需要完成的工作 clean 清理上一次 ...

  6. [maven] 生命周期和插件

    maven生命周期和插件 生命周期 maven的生命周期有三套,互相独立.每个生命周期含有不同阶段,常用如下 clean 清理项目 pre-clean 执行清理前需要完成的工作 clean 清理上一次 ...

  7. maven系列(3)-maven生命周期的介绍

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

  8. Java-Maven(三):Maven坐标、Maven仓库、Maven生命周期

    之前通过学习对maven命令有了部分了解,但是只是知道maven是用来做什么.但到目前位置还不足以全面的了解maven,为更全面的了解maven,需要学习以下几个概念:Maven坐标.Maven仓库. ...

  9. nexus私服搭建及maven生命周期

    一.maven找库流程 从流程上看创建nexus私服,能够优化流程,而且更加快速 二.nexus下载.安装 1.nexus下载地址 https://sonatype-download.global.s ...

  10. 05 Maven 生命周期和插件

    Maven 生命周期和插件 除了坐标.依赖以及仓库之外, Maven 另外两个核心概念是生命周期和插件.在有关 Maven 的日常使用中,命令行的输入往往就对应了生命周期,如 mvn package ...

随机推荐

  1. 《CUDA编程:基础与实践》读书笔记(3):同步、协作组、原子函数

    1. 单指令多线程模式 从硬件上看,一个GPU被分为若干个SM.线程块在执行时将被分配到还没完全占满的SM中,一个线程块不会被分配到不同的SM中,一个SM可以有一个或多个线程块.不同线程块之间可以并发 ...

  2. c#利用异步方法去模拟多线程处理业务

    一个巧妙的设计 原理:利用async 标识方法执行异步处理 List<long> listIds = new List<long>();//业务任务:假设处理这个列表的任务 o ...

  3. biancheng-MongoDB教程

    目录http://c.biancheng.net/mongodb2/ 1NoSQL是什么2MongoDB是什么3Windows安装MongoDB4Linux安装MongoDB5MacOS安装Mongo ...

  4. superset 图表加水印

    转载wenqiang1208的文章 superset 作为一个数据可视化的工具,其中的图表,报表数据是非常敏感的,为了防止数据外泄,大部分公司需要在敏感图表上加上水印. 本篇文章有2种方式去介绍如何在 ...

  5. SSL和HTTPS

    转载: 链接 随着互联网的发展,给我们的生活带来便利的同时,也伴随着很多网络钓鱼.信息泄露.网络诈骗等事件的频繁发生,企业网站被钓鱼网站仿冒,遭受经济损失,影响品牌形象. 如果网站不使用SSL证书,数 ...

  6. 独立开发经验谈:如何借助 AI 辅助产品 UI 设计

    我在业余时间开发了一款自己的独立产品:升讯威在线客服与营销系统.陆陆续续开发了几年,从一开始的偶有用户尝试,到如今线上环境和私有化部署均有了越来越多的稳定用户,在这个过程中,我也积累了不少如何开发运营 ...

  7. Yarn提交Flink任务参数介绍

    一.参数介绍 作业模式:yarn-per-job 基本参数 描述 -ynm(Custom Yarnname) 自定义的Yarn名字 -yqu 指定Yarn队列名 -yn (TaskManager)  ...

  8. 「ximagine」业余爱好者的非专业显示器测试流程规范,同时也是本账号输出内容的数据来源!如何测试显示器?荒岛整理总结出多种测试方法和注意事项,以及粗浅的原理解析!

    > 由于网页编辑器简陋,无法实现原文档的精心排版,如需原文档可联系... 序 「ximagine」在本篇文章中将介绍「荒岛」目前所使用的显示器测试流程及标准,我们主要使用Calman.Displ ...

  9. 【博客搭建】Hexo使用笔记

    [博客搭建]Hexo 使用笔记 Hexo 是一款前端博客框架,可以自动根据基于 Markdown 的文章生成博客网站代码. 基本概念 项目结构 目录 描述 _config.yml 网站的配置信息 th ...

  10. Spark - spark on yarn 的作业提交流程

    YarnClient YarnCluster 客户端(Client)通过YARN的ResourceManager提交应用程序.在此过程中,客户端进行权限验证,生成Job ID和资源上传路径,并将这些信 ...