Mavenplugin中的lifecycle、phase、goal、mojo概念是什么

这篇文章主要介绍“Maven plugin中的lifecycle、phase、goal、mojo概念是什么”,在日常操作中,相信很多人在Maven plugin中的lifecycle、phase、goal、mojo概念是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Maven plugin中的lifecycle、phase、goal、mojo概念是什么”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

成都创新互联公司是一家专业提供亭湖企业网站建设,专注与网站设计制作、网站设计成都h5网站建设、小程序制作等业务。10年已为亭湖众多企业、政府机构等服务。创新互联专业网络公司优惠进行中。

Maven

Maven有一个十分完善的生命周期模型(lifecycle),它有三套相互独立的生命周期,请注意这里说的是三套,而且相互独立,请别将Maven的生命周期看成一个整体哦,三个生命周期是独立线性执行的!分别是: 
1. Clean Lifecycle 在进行真正的构建之前进行一些清理工作。 
2. Default Lifecycle 构建的核心部分,编译,测试,打包,部署等等。 
3. Site Lifecycle 生成项目报告,站点,发布站点。 

Maven plugin中的lifecycle、phase、goal、mojo概念是什么

每个生命周期包含一些阶段(phase),这些阶段(phase)是有顺序的,每个阶段蕴含一个或多个目标(goal),并且后面的阶段依赖于前面的阶段,我们和Maven最直接的交互方式就是调用这些生命周期阶段。 

较之于生命周期阶段的前后依赖关系,三套生命周期本身是相互独立的,用户可以仅仅调用clean生命周期的某个阶段,或者仅仅调用default生命周期的某个阶段,而不会对其他生命周期产生任何影响。例如,当用户调用clean生命周期的clean阶段的时候,不会触发default生命周期的任何阶段。 

其中deault是最重要的生命周期,拥有validate 、compile 、test 、package 、integration、verify、install、deploy等等阶段 

Maven plugin中的lifecycle、phase、goal、mojo概念是什么

1. clean

用于清除之前构建生成的所有文件其中具体为清楚了Target目录中的所有文件,包括该目录,i.e:删除了install生成的所有文件

pre-clean  执行一些需要在clean之前完成的工作

clean  移除所有上一次构建生成的文件

post-clean  执行一些需要在clean之后立刻完成的工作

2.validate

用于验证工程是否真确,所需信息是否完整

generate-sources

process-sources

generate-resources

process-resources  复制并处理资源文件,至目标目录,准备打包

3.compile

编译项目的源代码,主要是java文件

一般是编译scr/main/java或是scr/test/java里面的文件

process-classes    源码编译后的后期处理,比如java字节码的增强(优化?)

generate-test-sources

process-test-sources

generate-test-resources

process-test-resources

4.test

test-compile    编译测试源代码(默认是test目录下)

process-test-class

执行单元测试,用合适的测试框架来进行测试,测试compile中编译出来的代码

5.package


 获取compile中编译好的代码并将其打包成可分类的格式,

prepare-package  将工程文件打包为指定的格式,例如JAR,WAR等

6.vertify

检查package是否有效、符合标准

7.install

将包安装至本地仓库,以让其它项目依赖

9.deploy

将最终的包复制到远程的仓库,以让其它开发人员与项目共享。

10.site

pre-site     执行一些需要在生成站点文档之前完成的工作

site    生成项目的站点文档

post-site     执行一些需要在生成站点文档之后完成的工作,并且为部署做准备

site-deploy     将生成的站点文档部署到特定的服务器

背景知识


maven对构建(build)的过程进行了抽象和定义,这个过程被称为构建的生命周期(lifecycle)。生命周期(lifecycle)由多个阶段(phase)组成,每个阶段(phase)会挂接一到多个goal。goal是maven里定义任务的最小单元,相当于ant里的target。

Mojo

Mojo 就是Maven plain Old Java Object。每一个 Mojo 就是 Maven 中的一个执行目标(executable goal),而插件则是对单个或多个相关的 Mojo 做统一分发。一个 Mojo 包含一个简单的 Java 类。插件中多个类似 Mojo 的通用之处可以使用抽象父类来封装。

以phase为目标构建

以phase为目标进行构建是最常见的,如我们平时经常执行的mvn compile、mvn test、mvn package等等,compile、test、package都是maven生命周期(lifecycle)里的phase,通过mvn命令,你可以指定一次构建执行到那一个阶段,在执行过程中,所有经历的执行阶段(phase)上绑定的goal都将得到执行。例如,对于一个jar包应用,当执行mvn package命令时,maven从validate阶段一个阶段一个阶段的执行,在执行到compile阶段时,compiler插件的compile goal会被执行,因为这个goal是绑定在compile阶段(phase)上的。这一点可从其对应的mojo类上得知:

Maven plugin中的lifecycle、phase、goal、mojo概念是什么

再比如经常使用的打包插件shade,它的goal是绑定到package阶段的,这样,使用mvn package进行打包时都会执行shade的。

Maven plugin中的lifecycle、phase、goal、mojo概念是什么

抛开mojo不讲,lifecycle与phase与goal就是级别的大小问题,引用必须是从高级引用下级(goal绑定到phase,也可理间为phase引用goal,只是在具体绑定时,不会phase定义引用哪些goal,但是执行是,却是phase调用绑定到它那的goal),也不能跨级引用,如lifecycle可以引用任意的phase,不同lifecycle可以同时引用相同的phase,lifecycle不能跨级引用goal。goal会绑定到任意的phase中,也就是说不同的phase可以同时引用相同的goal,所以goal可以在一个lifecycle里被重复执行哦,goal自然也不能说绑定到lifecycle中,它们三者的关系可以用公司里的 总领导,组领导,与职员的关系来解释

到此,关于“Maven plugin中的lifecycle、phase、goal、mojo概念是什么”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注创新互联网站,小编会继续努力为大家带来更多实用的文章!


文章题目:Mavenplugin中的lifecycle、phase、goal、mojo概念是什么
文章URL:http://scyanting.com/article/iejsie.html