【读书笔记】《Maven实战》 第7章 生命周期与插件

  • 7.1什么是生命周期

    • 软件开发人员每天都在对项目进行清理、编译、测试及部署,Maven生命周期是对所有构建过程进行抽象和统一,含项目的清理、初始化、编译、测试、打包、集成测试、验证、部署和站点生成等几乎所有构建步骤。
  • 7.2生命周期详解
    • 7.2.1三套相互独立的生命周期

      • clean:目的是清理项目
      • default:目的是构建项目
      • site:目的是建立项目站点
      • 两个原则
        • a)三套生命周期相互独立,不会相互影响
        • b)每个生命周期包含一些阶段(phase),阶段间有顺序且后面的阶段依赖于前面的阶段
    • 7.2.2clean生命周期
      • 1)pre-clean 执行一些清理前需要完成的工作
      • 2)clean 清理上一次构建生成的文件
      • 3)post-clean 执行一些清理后需要完成的工作
    • 7.2.3 default生命周期
      • 定义了真正构建是所需执行的所有步骤,是所有生命周期中最核心的部分
      • Maven官网参考:http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html
      • 1)validate
      • 2)initialize
      • 3)generate-sources
      • 4)process-sources:处理项目的主资源文件。一般来说,是对src/main/resouces目录的内容进行变量替换等工作后,负责到项目输出的主classpath目录中。
      • 5)generate-resources
      • 6)process-resources
      • 7)compile:编译项目的主代码。一般来说,是编译src/main/java下的java文件至项目输出的主classpath目录中
      • 8)process-classes
      • 9)generate-test-sources
      • 10)process-test-sources:处理项目测试资源文件。一般来说,是对src/test/resources目录的内容进行变量替换等工作,复制到项目输出的测试classpath目录中。
      • 11)generate-test-resources
      • 12)process-test-resources
      • 13)test-compile:编译项目的测试代码。一般来说,是编译src/test/java下的java文件到项目输出的测试classpath目录中
      • 14)process-test-compile
      • 15)test:使用单元测试框架运行测试,测试代码不会被打包或部署
      • 16)prepare-package
      • 17)package:接受编译好的代码,打包成可发布的格式,如jar
      • 18)pre-integration-test
      • 19)integration-test
      • 20)post-integration-test
      • 21)verify
      • 22)install:将包安装到Maven本地仓库
      • 23)deploy:将包复制到远程仓库
    • 7.2.4site生命周期
      • 1)pre-site:执行一些生成项目站点之前需要完成的工作
      • 2)site:生成项目站点文件
      • 3)post-site:执行一些在生成项目站点之后需要完成的工作
      • 4)site-deploy:将生成的项目站点发布到服务器上
    • 7.2.5 命令行与生命周期
      • 命令行中的命令根据7.2.1中的【两个原则】,可知具体执行了哪些阶段
      • 示例1:mvn clean:执行了7.2.2clean生命周期1)2)
      • 示例2:mvn test:执行了7.2.3default生命周期1)至15)
      • 示例3:mvn clean install:执行了7.2.2clean生命周期1)2),执行了7.2.3default生命周期1)至22)
      • 示例4:mvn clean deploy site-deploy:执行了7.2.2clean生命周期1)2),执行了7.2.3default生命周期1)至23)全部阶段,执行了7.2.4site生命周期1)至4)全部阶段
    • 7.3插件目标

      • 一个Maven插件能够完成多个任务,每个任务就是一个插件目标
      • 示例:maven-dependency-plugin插件,有analyze、tree、list等十几个目标。(使用【插件前缀:插件目标】的格式,dependency:analyze、dependency:tree、dependency:list)
    • 7.4插件绑定
      • 【生命周期】的【阶段】与【插件】的【目标】绑定,完成构建任务。
      • 注意:【插件】的【目标】与【生命周期】的【阶段】的绑定是在配置pom.xml时完成的,而不是插件在编写时已经设置好的!。
      • 7.4.1内置绑定
        • clean生命周期阶段与插件目标的绑定关系

          • 【clean】生命周期的【clean】阶段与【maven-clean-plugin】插件的【clean】目标绑定
        • site生命周期阶段与插件目标的绑定关系
          • 【site】生命周期的【site】阶段与【mvn-site-plugin】插件的【site】目标绑定
          • 【site】生命周期的【site-deploy】阶段与【mvn-site-plugin】插件的【deploy】目标绑定

        • default生命周期阶段与插件目标的绑定关系
          • 项目的打包类型(如jar、war)会影响构建的具体过程
      • 7.4.2自定义绑定
        • 示例:使用maven-source-plugin插件创建项目的源码jar包
        • 配置了id为attach-sources的任务,设置phase为verify将其绑定到(【default】生命周期)【verify】阶段,设置goal为jar-no-fork指定了执行【maven-source-plugin】插件的【jar-no-fork】目标。
        • 查看插件帮助信息:mvn help:describe -Dplugin=org.apache.maven.plugins:maven-source-plugin:2.1.1 -Ddetail
        • 绑定原则:
          • 1)当插件目标被绑定到不同的生命周期阶段,执行顺序由生命周期阶段的先后顺序决定。
          • 2)如果多个目标被绑定到同一个阶段,插件生命的先后顺序决定了目标的执行顺序。
时间: 2024-10-10 22:35:45

【读书笔记】《Maven实战》 第7章 生命周期与插件的相关文章

Maven实战(四)生命周期

1. 三套生命周期     Maven拥有三套相互独立的生命周期,它们分别为clean,default和site. 每个生命周期包含一些阶段,这些阶段是有顺序的,并且后面的阶段依赖于前面的阶段,用户和Maven最直接的交互方式就是调用这些生命周期阶段. 以clean生命周期为例,它包含的阶段有pre-clean, clean 和 post clean.当用户调用pre-clean的时候,只有pre-clean得以执行,当用户调用clean的时候,pre-clean和clean阶段会得以顺序执行:

Maven实战读书笔记(四):Maven生命周期与插件

Maven的生命周期是对所有构建过程的抽象和统一.包含了项目的清理.初始化.编译.测试.打包.集成测试.验证.部署和站点生成等几乎所有构建步骤. Maven的生命周期是抽象的,其实际行为是由插件来完成的,生命周期和插件两者协同合作,密不可分. 这种思想与设计模式中的模板方法非常相似.模板方法模式在父类定义算法的整体结构,子类通过实现或者重写父类的方法来控制实际行为,这样既能保证算法有足够的可扩展性,又能严格控制算法的整体结构. 4.1 生命周期 Maven拥有3套独立的生命周期:clean.de

学习笔记——Maven实战(五)自动化Web应用集成测试

自动化集成测试的角色 本专栏的上一篇文章讲述了Maven与持续集成的一些关系及具体实践,我们都知道,自动化测试是持续集成必不可少的一部分,基本上,没有自动化测试的持续集成,都很难称之为真正的持续集成.我们希望持续集成能够尽早的暴露问题,但这远非配置一个 Hudson/Jenkins服务器那么简单,只有真正用心编写了较为完整的测试用例,并一直维护它们,持续集成才能孜孜不倦地运行测试并第一时间报告问题. 自动化测试这个话题很大,本文不想争论测试先行还是后行,这里强调的是测试的自动化,并基于具体的技术

【读书笔记】设计模式第6章:行为型模式2

本文主要分析了中介者模式.观察者模式.备忘录模式.访问者模式.状态模式.解释器模式,介绍它们的定义.优缺点.使用场景,以及实例代码.为了深刻地理解设计模式,最重要的还是动手编写代码. 我参照书中的例程重新构想了一些更加生动.易于理解的例子,希望大家喜欢. 代码可以通过以下链接进行浏览: http://git.oschina.net/caipeichao/java-design-pattern 这些代码都经过编译运行,保证没有错误. 中介者模式 定义 也叫调停者模式 用一个中介对象来封装一系列同事

学习笔记——Maven实战(九)打包的技巧

“打包“这个词听起来比较土,比较正式的说法应该是”构建项目软件包“,具体说就是将项目中的各种文件,比如源代码.编译生成的字节码.配置文件.文档,按照规范的格式生成归档,最常见的当然就是JAR包和WAR包了,复杂点的例子是Maven官方下载页面的分发包,它有自定义的格式,方便用户直接解压后就在命令行使用.作为一款”打包工具“,Maven自然有义务帮助用户创建各种各样的包,规范的JAR包和WAR包自然不再话下,略微复杂的自定义打包格式也必须支持,本文就介绍一些常用的打包案例以及相关的实现方式,除了前

学习笔记——Maven实战(七)常用Maven插件介绍(上)

我们都知道Maven本质上是一个插件框架,它的核心并不执行任何具体的构建任务,所有这些任务都交给插件来完成,例如编译源代码是由maven-compiler-plugin完成的.进一步说,每个任务对应了一个插件目标(goal),每个插件会有一个或者多个目标,例如maven-compiler-plugin的compile目标用来编译位于src/main/java/目录下的主源码,testCompile目标用来编译位于src/test/java/目录下的测试源码. 用户可以通过两种方式调用Maven插

学习笔记——Maven实战(六)Gradle,构建工具的未来?

Maven面临的挑战 软件行业新旧交替的速度之快往往令人咂舌,不用多少时间,你就会发现曾经大红大紫的技术已经成为了昨日黄花,当然,Maven也不会例外.虽然目前它基本上是Java构建的事实标准,但我们也能看到新兴的工具在涌现,比如基于Goovy的Gradle,而去年Hibernate宣布从Maven迁移至Gradle这一事件更是吸引了不少眼球.在此之前,我也听到了不少对Maven的抱怨,包括XML的繁冗,不够灵活,学习曲线陡峭等等.那Gradle是否能够在继承 Maven优点的基础上,克服这些缺

[读书笔记]算法(Sedgewick著)·第二章.初级排序算法

本章开始学习排序算法 1.初级排序算法 先从选择排序和插入排序这两个简单的算法开始学习排序算法.选择排序就是依次找到当前数组中最小的元素,将其和第一个元素交换位置,直到整个数组有序. 1 public static void sort(Comparable a[]){ 2 int N = a.length; 3 for(int i = 0; i < N; i ++){ 4 int min = i; //最小元素索引 5 for(int j = i + 1; j < N; j++){ 6 if(

读书笔记:计算机网络第7章:阻塞控制

这是我在Coursera上的学习笔记.课程名称为<Computer Networks>,出自University of Washington. 由于计算机网络才诞生不久,目前正在以高速在发展,所以有些旧的教材可能都已经跟不上时代了.这门课程在2013年左右录制,知识相对还是比较新的.覆盖了计算机网络中的各个协议层,从物理层到应用层都讲得非常仔细.学完这门课程之后对计算机网络会有比较深刻的了解. 概述 课程位置 关于传输层和网络层的上半部分 话题 阻塞就类似于显示生活中的堵车 阻塞CONGEST