maven生命周期与插件
本文主要是针对《maven实战》书中关键知识点的学习记录,未免有纰漏或描述不到之处,建议购买阅读原书
Maven生命周期
maven拥有3套完全独立的周期,而并不是全都都是一起的(我当初就是这么以为...)
三个独立的周期是clean、default和site,每个周期中,有不同的阶段(phrase),经常在一些插件的配置里可以看见,下面是对每个生命周期的简单介绍。
clean
- pre-clean 执行清理前需要完成的工作
- clean 正式开始清理
- post-clean 执行清理后的工作
default
default是maven生命周期中最复杂的,包含许多的部分,仅对其中一些重要的部分说明
- validate
- initialize
- generate-sources
- process-sources 处理项目的资源文件,一般来说是
src/main/resources目录的内容进行变量的替换 - generate-resources
- process-resources
- compile 编译主项目的源代码
- process-classes
- generate-test-process
- process-test-classes
- generate-test-resources
- process-test-resources
- test-compile 编译项目测试代码
src/test/java - process-test-classes
- test
- prepare-package
- package
- pre-integration-test
- integration-test
- post-integration-test
- verify
- install 将安装包存放到本地的maven库中
- deploy 将最终的包复制到远程仓库,提供给他人使用
site
- pre-site
- site 生成项目站点文档
- post-site
- site-deploy 将生成的项目暂定,发布到服务器上去
命令与对应周期
- mvn clean 对应clean周期的全部
- mvn clean install 对应clean的全部周期,以及default中到install的部分
- mvn clean deploy site-deploy 对应clean全部,default全部以及site的全部
插件与绑定
插件目标
插件目标(goal),更像是插件自己内部定义的一些时期,或者说是功能模块。maven核心仅仅定义了抽象的生命周期,具体任务是交由插件完成的,插件按独立的形式存在
例如maven-dependency-plugin,它能够对项目进行依赖分析,输出依赖树,输出已解析的依赖等等。这3个功能就使用到了analyze, tree, list 3个目标
插件绑定
maven生命周期与插件互相绑定,更具体的是,生命周期与插件目标的相互绑定。例如default中的compile这一阶段,对应了maven-compiler-plugin插件的compile.
内置绑定
为了在使用中不用任何配置就可以构建Maven项目,maven在核心为一些主要生命周期绑定了很多插件的目标
例如在clean周期中的clean,绑定的是maven-clean-plugin:clean;
site周期中的site是,maven-site-plugin:site;site-deploy绑定 maven-site-plugin:deploy
至于default的,这比较的多,这个可以参考官网上的解释
自定义绑定
除了内置的绑定意外,用户还可以选择将某个插件目标绑定到生命周期的某个阶段上。比较常见的是如下这种代码配置
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.1.1</version>
<executions>
<execution>
<id>attach-sources</id>
<phase>verify</phase>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
上面的声明中,除了基本的坐标声明外,还有插件的执行配置。其中一个id为attach-source的执行任务,将插件绑定到default的verify的生命周期上,通过goals配置要指定的执行的插件目标。
有的插件及时不配置phase,插件目标也能绑定到生命周期中去,这是因为插件内部有默认的phase。
插件配置
经常使用的 mvn clean install -Dmaven.test.skip=true中的-D后面的一串,就是插件的配置,一般都是支持命令行与pom中配置参数的。但注意,并不是所有的插件都支持命令行配置参数,因此有的时候,需要再pom文件中进行配置了,下面这段也是很常见的一个pom中插件的配置
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</gourpId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.1</version>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
</plugins>
</build>
除了向上面这种用的多的源码的输入输出,还有一种是任务的配置,类似如下
<configuration>
<tasks>
<echo>doing ...</echo>
</tasks>
</configuration>
maven生命周期与插件的更多相关文章
- maven生命周期和插件
maven生命周期和插件 生命周期 maven的生命周期有三套,互相独立.每个生命周期含有不同阶段,常用如下 clean 清理项目 pre-clean 执行清理前需要完成的工作 clean 清理上一次 ...
- [maven] 生命周期和插件
maven生命周期和插件 生命周期 maven的生命周期有三套,互相独立.每个生命周期含有不同阶段,常用如下 clean 清理项目 pre-clean 执行清理前需要完成的工作 clean 清理上一次 ...
- 05 Maven 生命周期和插件
Maven 生命周期和插件 除了坐标.依赖以及仓库之外, Maven 另外两个核心概念是生命周期和插件.在有关 Maven 的日常使用中,命令行的输入往往就对应了生命周期,如 mvn package ...
- MAVEN学习笔记之Maven生命周期和插件简介(3)
MAVEN学习笔记之Maven生命周期和插件简介(3) clean compile site三套生命周期相互独立. clean pre-clean 执行清理前的工作 clean 清理上一次构建生成的所 ...
- Maven系列学习(三)Maven生命周期和插件
Maven生命周期和插件 Maven另外的两个核心概念就是生命周期和插件,Maven的生命周期都是抽象的,其实实际行为都是由插件来完成的,生命周期和插件两者协同工作 1.生命周期 Maven的生命周期 ...
- (十二)Maven生命周期和插件
除了坐标.依赖以及仓库之外,Maven的另外两个核心概念是生命周期和插件.在有关Maven的日常使用中,命令行的输入往往就对应了生命周期,如mvn package就表示执行默认生命周期阶段packag ...
- Maven生命周期和插件机制
Maven中的一个非常重要的概念是生命周期和插件,这篇文章重点介绍下Maven的生命周期. Maven的生命周期是抽象的,具体的功能是有具体的插件来完成的,Maven有相当多的功能插件,以至于Mave ...
- Maven生命周期(插件)
maven拥有三套相互独立的生命周期,它们分别是clean,default和site.clean生命周期的目的是清理项目,default生命周期的目的是构建项目,而site 生命周期的目的是建立项目站 ...
- maven生命周期和插件详解
生命周期 什么是生命周期? maven的生命周期就是对所有的构建过程进行抽象和统一.maven从大量项目和构建工具中总结了一套高度完善的.易扩展的生命周期.这个生命周期包含项目的清理.初始化.编译.测 ...
随机推荐
- Scrapy+Scrapyd+Scrapydweb实现爬虫可视化
Scrapy+Scrapyd+Scrapydweb实现爬虫可视化 Scrapyd是一个服务,用来运行scrapy爬虫的 它允许你部署你的scrapy项目以及通过HTTP JSON的方式控制你的爬虫 官 ...
- Android开发系列全套课程
学习地址 https://pan.baidu.com/s/12Ljy-TDL5-P0AsYdTxGw5w#list/path=%2F
- DVWA各级文件包含漏洞
File Inclusion文件包含漏洞 漏洞分析 程序开发人员通常会把可重复使用的函数写入到单个文件中,在使用某些函数时,直接调用此文件,而无需再次编写,这种调用文件的过程被称为包含. 有时候由于网 ...
- Day10 python高级特性-- 生成器 Generator
列表生成式可以创建列表,但是受内存限制,列表容量时有限的,创建一个巨量元素的列表,不仅占用很大的存储空间,当仅仅访问前几个元素时,后面的绝大多数元素占用的空间都被浪费了. 如果list的元素可以按照算 ...
- Docker 安装并部署Tomcat、Mysql8、Redis
1. 安装前检查 1 #ContOS 7安装Docker系统为64位,内核版本为3.10+ 2 lsb_release -a 3 4 uname -r 5 6 #更新yum源 7 yum -y up ...
- 精尽Spring MVC源码分析 - HandlerMapping 组件(二)之 HandlerInterceptor 拦截器
该系列文档是本人在学习 Spring MVC 的源码过程中总结下来的,可能对读者不太友好,请结合我的源码注释 Spring MVC 源码分析 GitHub 地址 进行阅读 Spring 版本:5.2. ...
- Nginx(一):安装与常用命令
简介 Nginx ("engine x") 是一个高性能的 HTTP 和反向代理服务器,特点是占有内存少,并发能 力强,事实上nginx的并发能力确实在同类型的网页服务器中表现 ...
- 六个步骤,从零开始教你搭建基于WordPress的个人博客
摘要:WordPress是使用PHP语言开发的博客平台,是免费开源的.用户可以在支持PHP和MySQL数据库的服务器上架设属于自己的网站,也可以把WordPress当作一个内容管理系统(CMS)来使用 ...
- CDH6.3.0下Apache Atlas2.1.0安装与配置
CDH6.3.0下Apache Atlas2.1.0安装与配置 0. 说明 文中的${ATLAS_HOME}, ${HIVE_HOME} 环境变更需要根据实际环境进行替换. 1. 依赖 A. 软件依赖 ...
- 个人微信公众号搭建Python实现 -个人公众号搭建-永久素材管理(14.3.5)
@ 目录 1.说明 2.上传素材 3.获取素材列表 关于作者 1.说明 个人微信公众号开发的功能有限,因为很多权限没有,但支持上传永久素材,具体查看微信公众号文档 这里的请求都要将本地IP地址放到微信 ...