Maven学习(四)-- 生命周期和插件
标签(空格分隔): 学习笔记
Maven生命周期是抽象的,不做任何实际的工作,在Maven的设计中,实际的任务都交由插件来完成。
每个构件步骤都可以绑定一个或者多个插件行为,而且Maven为大多数构建步骤编写并绑定了默认插件。
三套生命周期
Maven拥有三套相互独立的生命周期,分别为clean(清理项目),default(构建项目),site(建立项目站点).
每个生命周期包含一些阶段(stage),用户和Maven最直接的交互放肆就是调用这些生命周期阶段。
clean生命周期
- pre-clean: 执行一些清理前需要完成的工作;
- clean: 清理上一次构件生成的文件;
- post-clean: 执行一些清理后需要完成的工作。
default生命周期
default生命周期定义了真正构建时所需要执行的所有步骤,它是所有生命周期中最核心的部分。
- process-sources: 处理项目主资源文件。是对src/main/resources目录的内容进行变量替换等工作后,复制到项目输出的主classpath目录中。
- compile: 编译项目的主码源。编译src/main/java目录下的Java文件至项目输出的主classpath目录中。
- install: 将包安装到Maven本地仓库,供本地其他Maven项目使用;
- deploy: 将最终的包复制到远程仓库,供其他开发人员和Maven项目使用。
site生命周期
Maven能基于POM所包含的信息,自动生成一个友好的站点,方便团队交流和发布项目信息。
- pre-site: 执行一些在生成项目站点之前需要完成的工作;
- site: 生成项目站点文档;
- post-site: 执行一些在生成项目站点之后需要完成的工作;
- site-deploy: 将生成的项目站点发布到服务器上。
命令行与生命周期
各个生命周期是相互独立的,而一个生命周期的阶段是有前后依赖关系的。
- $mvn clean: 该命令调用clean生命周期的clean阶段。实际执行的阶段为clean生命周期的pre-clean和clean阶段;
- $mvn test: 该命令调用default生命周期的test阶段。实际执行的阶段为default生命周期的validate、initialize等,直到test的所有阶段;
- $mvn clean install: 该命令调用clean生命周期的clean阶段和default生命周期的install阶段。
- $mvn clean deploy site-deploy: 该命令调用clean生命周期的clean阶段、default生命周期的deploy阶段,以及site生命周期的site-deploy阶段。
插件目标
例如,一个插件maven-dependency-plugin有十多个目标,每个目标对应了一个功能,上述提到的几个功能分别对应的插件目标为:dependency;analyze, dependency-tree, dependency-list。冒号前面是插件前缀,冒号后面是该插件的目标。
(总之,插件目标是指插件对应的多个功能的实现)。
插件绑定
Maven的生命周期与插件相互绑定,用以完成实际的构建任务。
插件解析机制
为了方便操作,Maven不需要用户提供完整的插件坐标信息就可以解析得到正确的插件。例如:执行mvn help:system这样一条命令,它到底执行了什么插件?该插件的groupId, artifactId, version分别是什么?下面详细介绍Maven的运行机制。
插件仓库
与依赖构件一样,插件构件同样基于坐标存储在仓库中。在需要的时候,Maven先在本地仓库中寻找插件,如果不存在,则从远程仓库查找。找到插件后,在下载到本地仓库使用。
但是Maven会区别对待依赖的远程仓库和插件的远程仓库,插件的远程仓库配置如下:
<pluginRepositories>
<pluginRepository>
<id>central</id>
<name>Maven Plugin Repository</name>
<url>http://repo1.maven.org/maven2</url>
<layout>default</layout>
<snapshots>
<enable>false</enable>
</snapshots>
<releases>
<updatePolicy>never</updatePolicy>
</releases>
</pluginRepository>
</pluginRepositories>
插件默认的groupId
在POM配置插件的时候,如果该插件是Maven的官方插件(即groupId为org.apacha.maven.plugins),就可以省略groupId的配置:
<build>
<plugins>
<plugin>
<artifactId>maven-complier-plugin</artifactId>
<version>2.1</version>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
</plugins>
</build>
解析插件版本
为了简化插件的配置和使用,在用户没有提供插件版本的情况下,Maven会自动解析插件版本。方式与依赖插件解析一致。
但是依赖Maven解析插件版本是不推荐的做法,会存在潜在的不确定性。
解析插件前缀
插件前缀与groupId:artifactId是一一对应的,这种匹配关系存储在仓库元数据中。
与依赖插件groupId/artifactId/maven-metadata.xml不同,这里的仓库元数据为groupId/maven-metadata.xml。插件的默认位置为:http://repo1.maven.org/maven2/org/apache/maven/plugins和http://repository.codehaus.org/org/codehaus/mojo/,Maven在解析插件仓库元数据的时候会默认使用这两个groupId。
也可以通过配置settings.xml让Maven检查其他groupId上的插件仓库元数据:
<settings>
<pluginGroups>
<pluginGroup>com.your.plugins</pluginGroup>
</pluginGroups>
</settings>
Maven学习(四)-- 生命周期和插件的更多相关文章
- Maven整理笔记の生命周期和插件
项目构建的生命周期,其实软件开发人员每天都在干这个事,即项目清理.初始化.编译.测试.打包.集成测试.验证.部署和站点生成等,可以说几乎所有项目的构建都可以映射到这样一个生命周期上. Maven的插件 ...
- Maven专题3——生命周期与插件
三套生命周期 Maven有3套相互独立的生命周期,用户可以调用某个生命周期的阶段,而不会对其他生命周期产生影响. 每个生命周期包含一些有先后顺序的阶段,后面的阶段依赖于前面的阶段,意味着用户调用后面的 ...
- 项目构建之maven篇:6.生命周期与插件
项目生命周期 清理 初始化 编译 測试 打包 部署 三套生命周期 1.clean pre-clean 运行一些须要在clean之前完毕的工作 clean 移除全部上一次构建生成的文件 post-cle ...
- 05 Maven 生命周期和插件
Maven 生命周期和插件 除了坐标.依赖以及仓库之外, Maven 另外两个核心概念是生命周期和插件.在有关 Maven 的日常使用中,命令行的输入往往就对应了生命周期,如 mvn package ...
- Maven 学习总结 (二) 之 生命周期与插件
五.生命周期与插件 1.Maven有三套独立的生命周期:clean.default和site. clean生命周期的目的是清理项目,default生命周期的目的是构建项目,site生命周期的目的是建立 ...
- MAVEN学习笔记之Maven生命周期和插件简介(3)
MAVEN学习笔记之Maven生命周期和插件简介(3) clean compile site三套生命周期相互独立. clean pre-clean 执行清理前的工作 clean 清理上一次构建生成的所 ...
- Maven学习笔记(六):生命周期与插件
何为生命周期: Maven的生命周期就是为了对全部的构建过程进行抽象和统一.Maven从大量项目和构建工具中学习和反思,然后总结了一套高度完好的.易扩展的生命周期.这个生命周期包括了项目的清 ...
- maven学习(十)——maven生命周期以及插件
一.生命周期 1.何为生命周期? Maven生命周期就是为了对所有的构建过程进行抽象和统一,包括项目清理,初始化,编译,打包,测试,部署等几乎所有构建步骤 2.Maven三大生命周期 Maven有三套 ...
- Maven实战读书笔记(四):Maven生命周期与插件
Maven的生命周期是对所有构建过程的抽象和统一.包含了项目的清理.初始化.编译.测试.打包.集成测试.验证.部署和站点生成等几乎所有构建步骤. Maven的生命周期是抽象的,其实际行为是由插件来完成 ...
随机推荐
- Unity学习疑问记录之隐藏与显示物体
Unity3D中隐藏与显示物体的一些操作 http://unity3d.9tech.cn/news/2013/0930/33019.html
- Mysql5.5命令行修改密码
今天下载了mysql5.5.45免安装版,配置好之后发现mysql默认是没有设置密码的,也就是密码为空. 如果是本机作开发测试用,有无密码倒也无所谓,不过发布在服务器上没有密码肯定是不行的,那就需要设 ...
- Codeforces Round #376 (Div. 2) C D F
在十五楼做的cf..一会一断...比赛的时候做出了ABCF 就没有时间了 之后没看题解写出了D..E是个神奇的博弈(递推或者dp?)看了题解也没有理解..先写了CDF.. C 有n个袜子 每个袜子都有 ...
- VS2012编译VS2010版本的过程报错解决
C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\Platforms\Win32C:\Program Files\MSBuild\Microsoft C:\Pro ...
- 【五子棋AI循序渐进】——整合完成
经过一年多的学习和探索,终于在今天得到了一些回报,在实现PVS多线程和加入了一个新的启发模式之后,搜索速度达到了120K左右,现在整合了VCF/VCT引擎.PVS混合引擎之后,棋力与连珠fiver6基 ...
- 临时存存储页面上的数据---js中的cookie
实现的效果: 当点击某个按钮的时候,实现点击A的同时,弹出B的注册div,使填写在B信息数据保存下来,点击B的确定按钮,B消失,A的图标往后移动一格,原来的位置为图标C,点击C可以弹出来一个链接的页面 ...
- 手写一个更好用的performSelector/msgSend(详细修改版)
这其实是一个NSInvocation练习作业 GitHub源码 vk_msgSend 引子 工作中难免会遇到一些场景,开发的时候不想引入整个头文件,但是又想调用一些方法 动态创建,动态调用看起来比较酷 ...
- GitLab + Jenkins + Docker + Kubernetes。
目前方案是GitLab + Jenkins + Docker + Kubernetes. 方案的工作流程如下:首先,开发人员提交代码代码提交:随后,GitLab 会自动触发Jenkins job,Je ...
- 在Linux最小系统上编译运行第一个helloworld程序
一.安装和使用SSH软件 1.安装SSH 软件 1)SSH 软件压缩包可以在网盘下载,下载后解压,进入解压出来的文件夹,如下图. 2)单击上图中的“SSHSecureShellClient-3.2.9 ...
- apache php env build
from http://blog.csdn.net/yincg/article/details/8782364 1.1 系统说明Centos 6.2 (最小化安装)1.2 软件说明httpd-2.4. ...