Maven插件和插件目标解析

格桑聊科技 2022-05-02 12:46:59
Maven插件和插件目标解析

Maven生命周期的阶段的执行顺序

上面总结了Maven的3个生命周期中的每个阶段,发现它在我们不知道的情况下,竟然经历了这么多杂七杂八的阶段。

也可分析得知,我们平时执行的maven指令:mvn clean、mvn compile、mvn install其实都是执行maven某个生命周期中的具体阶段。

这里有个很重要的知识,就是当我们执行maven的指定阶段时,会从目标生命周期的第一个阶段开始执行,按顺序执行到我们指定的阶段。

举例:

如果我们是mvn clean,那么它是先执行pre-clean阶段,然后才执行clean阶段。

如果我们是mvn compile,它就会从validate阶段开始执行,然后是initialize阶段,一个一个执行到compile阶段。它不会执行clean的阶段,因为那是另一个生命周期。我们指定的mvn compile属于default生命周期,所以也只会从default生命周期中按序执行各个阶段。

如果我们是mvn clean install,那么它也是先执行clean生命周期的阶段直至clean阶段,然后执行default生命周期的阶段直至install阶段。

插件和插件的目标

前面我们说了每个阶段都代表一种操作,并且Maven生命周期和阶段是个抽象的概念,它们并没有真正的执行什么。

在引出插件和阶段的绑定关系前,我们需要先把插件详细讲解一下,因为它也和生命周期类似,它也有更细化的概念,那就是:插件目标(Plugin Goal)

生命周期是一些阶段的统称,插件其实也可以说是一些**插件目标(Plugin Goal)**的统称。

Maven的插件和Maven是相对独立的,正如它的名字:插件,只有当Maven需要的时候,Maven才会下载使用插件,这和下载依赖也类似。一个依赖通常不会只有一种功能,所以我们也应该知道,一个Maven插件,它也很可能具有不止一种功能。

那么如果想执行一个插件中的指定功能,就需要插件目标这个概念,例如maven-compiler-plugin插件,它是负责编译的插件,它的其中一个插件目标是compile。

通常插件和插件目标之间是用冒号分隔的,如果我们想表达前面所说的compile,通常可以用compiler:compile,这里的compiler是maven-compiler-plugin插件的插件前缀,可以说是该插件的缩写的意思,这里插件前缀我会在后面单独说明。

可能有些人会想,既然一个插件有很多不同的功能,那为什么不做一个新的插件?一个插件对应一种功能,不就可以省了插件目标这个概念了吗?

因为这些不同功能很可能需要复用很多相同的代码,如果分成十几个不同插件,那就相当于把一份相同的代码复制了十几次到不同的工程下,这显然是很糟糕的,正如我们在开发时也不会为每个功能都单独创建一个工程。

0 阅读:30

格桑聊科技

简介:最通俗易懂的教程,带领大家入门学习java