Maven生命周期与插件

生命周期

Maven 有三种不同的生命周期,分别为 default、clean、site,Maven 在执行时需要选择其中的一种生命周期来执行。一个生命周期有多个阶段,这些阶段都是有顺序的,我们在构建项目时需要指定执行哪一个阶段,之后 Maven 在执行时会按顺序把该阶段和之前的所有阶段都执行一遍。一个阶段可以关联零个或多个插件的目标,而执行阶段其实也就是在执行该阶段所关联的插件目标。如下图是 default 生命周期的所有阶段。

在这里插入图片描述

用户要执行的阶段所在的生命周期就是 Maven 选择的生命周期。

Maven 可以一次性执行一个或多个阶段,但一次性执行多个阶段和独立执行这些阶段完全等价。

mvn clean
mvn compile

# 完全等价于
mvn clean compile

捆绑插件

生命周期默认会捆绑一些插件。在 default 生命周期中,对于不同类型的项目(POM 文件中 packaging 标签的定义的类型),Maven 会在不同的阶段中捆绑不同的插件,而对于 clean 和 site 生命周期,Maven 会为所有类型的项目都捆绑一些固定的插件。如下图是 default 生命周期中对于 pom 和 jar 类型的项目默认捆绑的插件。

在这里插入图片描述

在这里插入图片描述

插件目标

一个插件中包含多个目标,每个目标都有着不同的功能,而阶段在关联插件时其实是关联插件的某些目标,并且不同的阶段可以关联同一个插件中的同一个目标。项目在引入插件后需要手动配置插件,也就是将哪些目标关联到哪些阶段上。在引入插件时可以在 <executions> 标签中配置插件。

<build>
    <plugins>
        <plugin>
            <groupId>com.example</groupId>
            <artifactId>my-plugin</artifactId>
            <version>1.0.0</version>
            <executions>
                <!-- 在compile阶段执行插件的goal-1目标 -->
                <execution>
                    <id>execution-1</id>
                    <phase>compile</phase>
                    <goals>
                        <goal>goal-1</goal>
                    </goals>
                </execution>
                <!-- 在install阶段执行插件的goal-2和goal-3目标 -->
                <execution>
                    <id>execution-2</id>
                    <phase>install</phase>
                    <goals>
                        <goal>goal-2</goal>
                        <goal>goal-3</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

插件默认会将一些目标关联到某个阶段上,但这些关联行为是独立的,并不会被我们自己配置的关联所覆盖,也就是说如果我们手动配置了同样的关联关系,则该关联关系会执行两遍,因此如果引入的插件的默认配置能够满足需求则无需再手动配置插件。

有些插件目标虽然关联了某个阶段,但如果在该阶段中有一些条件未满足则插件目标不会被执行。

在这里插入图片描述

在这里插入图片描述

查看插件信息

通过 mvn help:describe 命令可以查看插件的信息,该插件的 plugin 参数用于指定要查看哪个插件的信息,格式为 groupId:artifactId[:version],如果不指定 version 则默认查看最新版本的信息。

mvn help:describe "-Dplugin=org.springframework.boot:spring-boot-maven-plugin"

mvn help:describe "-Dplugin=org.springframework.boot:spring-boot-maven-plugin:3.2.0"

默认输出指定插件和该插件所有目标的描述信息,如果添加 minimal 参数则只输出插件的描述信息,如果添加 detail 则额外输出插件目标的参数信息。

mvn help:describe "-Dplugin=org.springframework.boot:spring-boot-maven-plugin" -Dminimal

mvn help:describe "-Dplugin=org.springframework.boot:spring-boot-maven-plugin" -Ddetail

如果只想输出某个目标的描述信息,可以使用 goal 参数,此时添加 detail 参数可以额外输出该目标的参数信息。

mvn help:describe "-Dplugin=org.springframework.boot:spring-boot-maven-plugin" "-Dgoal=run"

mvn help:describe "-Dplugin=org.springframework.boot:spring-boot-maven-plugin" "-Dgoal=run" -Ddetail

执行插件

插件目标可以自动执行也可以手动执行。如果插件目标被关联到某个阶段中,则在执行这些阶段时会自动执行插件目标。插件目标也可以单独执行,此时可以无需在 POM 文件中引入该插件。

mvn org.springframework.boot:spring-boot-maven-plugin:run

mvn org.springframework.boot:spring-boot-maven-plugin:3.2.0:run

在执行插件目标时如果目标有前置阶段的话,则 Maven 会先去完完整整地执行该前置阶段,然后才会去执行指定的目标。

在这里插入图片描述

全局前缀

插件都有全局前缀,在使用时可以将 groupId:artifactId 替换成全局前缀以简化操作。当使用全局前缀时,Maven 会去项目使用的所有插件中(捆绑的和引入的)寻找对应的插件,如果没找到则看该全局前缀是不是内置的,如果都不是则会报错。因此在使用全局前缀时,只能使用内置的或项目使用的插件的全局前缀。

groupIdorg.apache.maven.pluginsorg.codehaus.mojo 的插件的全局前缀为内置前缀。

在这里插入图片描述

mvn spring-boot:run

mvn help:describe "-Dplugin=spring-boot"

上面命令使用的是全局前缀为 help 的插件,该插件的实际名称为 org.apache.maven.plugins:maven-help-plugin,虽然项目没有使用该插件,但由于该插件的 groupIdorg.apache.maven.plugins 因此可以直接使用对于的全局前缀。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值