Maven 生命周期

Maven 专栏收录该内容
14 篇文章 4 订阅

1 简介

在Maven中一共有如下的核心概念
在这里插入图片描述
 在接下来的一系列文章中,生命周期和插件是要阐述的目标。Maven生命周期和插件有怎样的关系?Maven有哪些生命周期,一个人的生命周期有婴儿、少年你、青年、壮年、老年等阶段,在Maven中生命周期分为那些阶段?Maven提炼出这些生命周期阶段有着怎样的好处呢?
 Maven的生命周期就是为了对所有的构建过程进行抽象和统一Maven从大量项目和构建过程中学习和反思,然后总结了一套高度完善的易于扩展的生命周期。这个生命周期包含了项目的清理、初始化、编译、测试、打包、集成测试、验证、部署和站点生成等几乎所有的构建步骤

2 AstractBuild

public abstract class AbstractBuild(){
    public void build(){
        initialize(); // 初始化工作
        compile(); // 编译
        test();        // 测试
        packagee(); // 打包
        integrationTest(); // 集成测试
        deploy();  // 部署
    }
}

 如上述简单抽象类而言,在Maven设计中,实际的任务都交由插件来完成。这种思想与设计模式中的模板方法模式Template Method类似,由Maven规定了构建的整体过程,而子类可以通过实现或者重写父类的方法来控制实际的行为,即保持扩展性,又严格的控制整体结构。
 在实际执行类似mvn clean或者mvn compile的命令时,实际上均调用了相应的插件来执行相应的功能。可以理解为插件实现了生命周期中各个阶段的对应抽象方法。生命周期抽象了构建的各个步骤,定义了它们的次序,但没有给出具体的实现。当然不能让用户为了编译而写出一堆代码,因为这样成千上万的用户均可能给出个性化的实现,这样显然增加了实际构建的复杂性,Maven设计了插件机制。每个构建步骤都可以绑定一个或者多个插件行为(插件目标Plugin Goal),虽然Maven提供了许多的插件,但为了个性化用户需求,Maven开放了插件配置的能力,可以自定义插件执行任务时的配置。
 Maven的生命周期和插件机制一方面保证了所有的Maven项目有一致的构建标准,另一方面通过默认插件简化和稳定了实际项目的构建。此外,该机制提供了足够的扩展空间,用户可以通过配置现有插件或者自行编写插件来自定义构建行为。

3 三套生命周期

3.1 三套生命周期

在这里插入图片描述
Maven 有三套相互独立的生命周期,分别是clean、default和site。

  1. clean生命周期的目的是清理项目
  2. default生命周期的目的是构建项目
  3. site生命周期的目的是建立项目站点
    需要注意的是:这些阶段是有顺序的,用户和Maven最直接的交互方式就是调用这些生命周期阶段。并且三套生命周期是相互独立的。

3.2 命令行与生命周期

3.2.1 mvn clean

在这里插入图片描述
可以看到在实际执行时调用了插件maven-clean-plugin:3.0.0的clean目标。执行了default-clean生命周期

3.2.2 mvn test

在这里插入图片描述
mvn test该命令调用了default生命周期的test阶段,实际调用了validate、initialize直到test的所有阶段。

3.2.3 mvn clean install

D:\Git\profile\profile>mvn clean install
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------< com.example:profile >-------------------------
[INFO] Building profile 1.3-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-clean-plugin:3.0.0:clean (default-clean) @ profile ---
[INFO] Deleting D:\Git\profile\profile\target
[INFO]
[INFO] --- maven-resources-plugin:3.0.1:resources (default-resources) @ profile ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 4 resources
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.7.0:compile (default-compile) @ profile ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 3 source files to D:\Git\profile\profile\target\classes
[INFO]
[INFO] --- maven-resources-plugin:3.0.1:testResources (default-testResources) @ profile ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory D:\Git\profile\profile\src\test\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.7.0:testCompile (default-testCompile) @ profile ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-surefire-plugin:2.21.0:test (default-test) @ profile ---
[INFO] No tests to run.
[INFO]
[INFO] --- maven-jar-plugin:3.0.2:jar (default-jar) @ profile ---
[INFO] Building jar: D:\Git\profile\profile\target\profile-1.3-SNAPSHOT.jar
[INFO]
[INFO] --- maven-install-plugin:2.5.2:install (default-install) @ profile ---
[INFO] Installing D:\Git\profile\profile\target\profile-1.3-SNAPSHOT.jar to C:\Users\lenovo\.m2\repository\com\example\p
rofile\1.3-SNAPSHOT\profile-1.3-SNAPSHOT.jar
[INFO] Installing D:\Git\profile\profile\pom.xml to C:\Users\lenovo\.m2\repository\com\example\profile\1.3-SNAPSHOT\prof
ile-1.3-SNAPSHOT.pom
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3.588 s
[INFO] Finished at: 2019-06-22T11:38:05+08:00
[INFO] ------------------------------------------------------------------------

D:\Git\profile\profile>

该命令执行了clean生命周期的clean阶段和default生命周期的install阶段。

4 总结

文档简要陈述了Maven生命周期的基本概念,通过抽象类AbstractBuild理解模板方法在Maven生命周期的使用。最后讲述了三套Maven生命周期的基本含义和阶段,只要对Maven生命周期有一个基本的理解,读者就可以正确而熟练的使用Maven命令。

												201962211:42:08于马塍路36
  • 1
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值