欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

第六章 maven核心概念-生命周期和插件

程序员文章站 2022-04-23 16:54:56
...

什么是生命周期?

生命周期,说白了,就是从出生到挂掉中间的一些列过程。相信做过web开发的人对servlet的生命周期不陌生。同理,人的这一生,生命周期基本可以分为呱呱落地、幼儿园、小学初中高中大学、工作、退休,到最后挂在墙上。

maven的生命周期

人的生命周期对人的一生抽象,同样,maven的生命周期对构建的过程进行了抽象和统一。Maven的生命周期包含项目的清理、初始化、编译、测试、打包、集成测试、验证、部署和站点生成等。

maven抽象了三套生命周期,可以理解为将项目的构建过程分了一个类,每一类都是一个小的生命周期


第六章 maven核心概念-生命周期和插件
            
    
    博客分类: maven maven生命周期插件
 maven抽象了三套生命周期,clean、default、site,每套生命周期包含多个任务,一个任务成为一个阶段。

clean:项目清理

default:包含一系列关键的构建动作

site:项目站点报告相关

我们要执行某个构建任务,可以使用这些生命周期阶段,比如,在命令行中,执行mvn clean,对应的就是clean生命周期的clean阶段,mvn install对应的就是default生命周期的install阶段,同理,在IDE中运行maven命令也是一样。

 

生命周期之间相互独立,生命周期阶段有顺序,后面的阶段依赖前面的阶段

生命周期之间相互独立,是说不同生命周期之间没有关联,比如执行clean生命周期的clean阶段,不会影响default生命周期的阶段;而同一套生命周期内部,生命周期阶段之间是有顺序的,上图列出了重要生命周期的顺序,从上到下,比如,在执行mvn install是,在default生命周期中,位于install之前的阶段都会依次执行,maven内部会先执行validate、...compile...,一直到install为止。

不同生命周期的阶段可以组合使用,如在测试或安装前,一般需要先清理上次构建的输出,那么可以组合clean和test或package,如mvn clean test,maven会先执行clean生命周期的相应阶段、default生命周期的从头到test阶段的所有阶段。

 

插件

插件的概念大家都不陌生,比如,eclipse就有众多的插件,需要什么功能,添加相应的插件就可以。maven也是基于插件的机制实现的。其实,之前讲述的生命周期的不同阶段完成的任务,都是通过相应的插件来完成的,生命周期本身不能工作,具体的任务由相应的插件完成

一个插件会提供多个功能,一个功能就是一个目标(goal)。

我们会发现,在安装完maven后,我们基本没做什么,就已经能通过mvn clean、mvn test、mvn install这行命令执行相应的构建任务了,我们又说过,这些任务是由相应的插件完成的,但是,这些插件我们并没有配置,那怎么会工作呢?这是因为maven默认已经内置了常用插件的配置,这又是maven约定大于配置的体现。maven内置的常用插件如下:

第六章 maven核心概念-生命周期和插件
            
    
    博客分类: maven maven生命周期插件
 

 

上图中间一列列出了插件及对应的目标,一个插件可能会有多个目标,每个目标完成相应的任务,比如,我们在编译项目时,编译任务是由maven-compile-plugin完成的,它有两个目标,compile和testCompile,分别用于编译主代码和测试代码。

前面提到过,生命周期本身是抽象的,就好比接口一样,本身不能工作,但是为什么我们执行说过,我们执行生命周期的相应阶段,比如mvn clean install,clean和install分别是clean生命周期和default生命周期的阶段,他们是生命周期,是抽象的,应该不能工作才对,为什么这边输入生命周期阶段maven却能做相应的事呢?这是因为maven默认已经将这些生命周期阶段与相应的插件目标绑定了,上图第一列就是相应的生命周期阶段,第二列是相应的生命周期阶段对应的插件目标,因此,我们在输入生命周期阶段时,maven会找对应的插件的目标执行,因此,在命令行输入mvn clean和mvn maven-clean-plugin:clean效果是一样的。

 

maven默认已经内置了常用的插件,用于完成基本的构建任务,但是这些插件还远远不够的,maven提供了大量的插件供我们使用,我们可以在pom文件中配置相应的插件:

在pom的<build>配置元素的子元素<plugins>下配置插件

第六章 maven核心概念-生命周期和插件
            
    
    博客分类: maven maven生命周期插件
 一个plugin元素代表一个插件,插件也是同过GAV标志,execution代表一个绑定,将生命周期的阶段与插件的一个目标绑定,这样,在命令行输入生命周期阶段时,就会执行对应的插件的目标,完成相应的任务。

 

插件仓库

同构件仓库一样,我们在第五章中介绍了仓库的配置,那只对普通的jar包有效,插件有独立的仓库,配置方式同jar包的仓库类似

第六章 maven核心概念-生命周期和插件
            
    
    博客分类: maven maven生命周期插件
 只不过配置元素变位pluginRepository

 

maven提供了很多插件,可以在maven官网上查看,地址如下

http://maven.apache.org/plugins/index.html

到目前为止,我们理解了那些maven命令背后的含义,我们可以使用生命周期阶段来执行相应的构建任务,但是这些生命周期本省是不能工作的,maven将这些生命周期阶段绑定到了相应的插件的目标,执行这些生命周期阶段时,背后其实执行的是相应插件的目标,来完成相应的任务。

 

  • 第六章 maven核心概念-生命周期和插件
            
    
    博客分类: maven maven生命周期插件
  • 大小: 60.2 KB
  • 第六章 maven核心概念-生命周期和插件
            
    
    博客分类: maven maven生命周期插件
  • 大小: 43.2 KB
  • 第六章 maven核心概念-生命周期和插件
            
    
    博客分类: maven maven生命周期插件
  • 大小: 6 KB
  • 第六章 maven核心概念-生命周期和插件
            
    
    博客分类: maven maven生命周期插件
  • 大小: 4.7 KB