今天我们来聊聊Maven中两个高级的概念—— 插件和目标

插件(plugin)

Maven的核心是一个插件执行框架;所有的工作都是由插件完成的。

Maven中Plugin分为两种类型:

  • build类型Plugin只能在build阶段执行,在POM中需要在 <build/> 标签下进行配置。

  • reporting类型:在site generation阶段被执行。在POM中需要在<reporting/>标签下配置。

核心plugin如下图所示:

我们通常在pom.xml中配置plugin,如下图所示:

我们可以通过下面的命令来查看failsafe插件的使用方法

mvn failsafe:help

我们可以通过下面的命令来运行failsafe插件

mvn <PLUGIN>:<GOAL>

想要了解更多的plugin信息可以参考文章:

Maven -- Available Plugins

在使用插件的过程中,我们还必须指定要作为运行构建的一部分------目标(goal)。

目标(goal)

插件(plugin)可以具有一个或多个目标(goal),其中每个目标表示该插件的能力。goal 是存在于 maven plugin 中,因此,大多数的 maven 功能实际上是存在于插件中,一个 maven 插件提供了一组可以被运行的 goal。大家可可以理解为goal就是插件的参数,同一个插件通过不同的参数输入来实现不同功能的输出。例如:Compiler插件(其完整的插件名字为org.apache.maven.plugins:maven-compiler-plugin)有两个目标:compile和testCompile。前者编译主代码的源代码,而后者编译测试代码的源代码。

mvn可以执行一个目标或一个阶段(甚至多个目标或多个阶段),如下所示:

mvn clean install plugin:goal

某些阶段(phase)默认具有与之绑定的目标(goal),例如clean和 site。对于默认的生命周期,这些绑定依赖于打包值。如果大家对Maven中阶段和生命周期相关概念不是很熟悉可以参考文章:

不理解Maven中生命周期和阶段的含义,是无法理解mvn clean install这条命令的!-CSDN博客

下面是一些目标与其所在对应构建阶段的绑定关系。

clean phase

site phase

Default Lifecycle Bindings - Packaging pom

Default Lifecycle Bindings - Packaging ejb / ejb3 / jar / par / rar / war

Default Lifecycle Bindings - Packaging ear

Default Lifecycle Bindings - Packaging maven-plugin

关于目标(goal)的总结

目标(goal)是真正执行任务的单元;

目标的提供者是插件(plugin),每一个plugin可能提供多个目标;

可以将对应的goal绑定到某个phase上,当在进行maven构建的过程中只要执行到了对应的phase上,就可以在当前phase上完成goal的执行。

阶段和目标的关系总结

大家看到这里可能会有个问题?goal跟phase很像,二者有什么区别呢?运行某个 phase 时,必须把生命周期中的所有的前置 phase 都会运行一遍。而运行 goal,可以脱离生命周期这个概念,通过 maven 插件,单独的运行某个 goal 或一组 goal。例如指定了jar:jar目标,它只会运行jar:jar目标来将你的代码打包到一个jar中。如果您之前没有运行编译目标或以其他方式准备编译代码,则很可能会失败。

另外,如果我们尝试构建一个Maven项目,如果没有指定阶段或目标就会报错:

No goals have been specified for this build. You must specify a valid lifecycle phase or a goal

在IDEA中,我们可以清晰地看到我们Maven工程中生命周期、插件和目标的相关详情信息,如下所示:

我的每一篇文章都希望帮助读者解决实际工作中遇到的问题!如果文章帮到了您,劳烦点赞、收藏、转发!您的鼓励是我不断更新文章最大的动力!

相关推荐
计算机毕设定制辅导-无忧学长7 小时前
Maven 基础环境搭建与配置(二)
java·maven
五月茶7 小时前
Maven+SSM+SpringBoot+Mybatis-Plus
spring boot·maven·mybatis
zl9798998 小时前
MybatisPlus-注解
java·spring·maven
杰九9 小时前
【环境配置】maven,mysql,node.js,vue的快速配置与上手
java·vue.js·spring boot·mysql·node.js·maven
m0_748244839 小时前
(CICD)自动化构建打包、部署(Jenkins + maven+ gitlab+tomcat)
自动化·jenkins·maven
桃子是唯一的水果12 小时前
java 单例模式(Lazy Initialization)实现遍历文件夹下所有excel文件且返回其运行时间
java·单例模式·maven
计算机毕设定制辅导-无忧学长21 小时前
Maven 基础环境搭建与配置(一)
java·maven
计算机毕设指导61 天前
基于Springboot学生宿舍水电信息管理系统【附源码】
java·spring boot·后端·mysql·spring·tomcat·maven
爱吃南瓜的北瓜1 天前
Maven之jjwt依赖爆红
java·pycharm·maven
计算机毕设指导61 天前
基于SpringBoot的城乡商城协作系统【附源码】
java·spring boot·后端·mysql·spring·tomcat·maven