maven 生命周期、生命周期阶段、插件、目标
生命周期
maven的生命周期是抽象的,它本身不做任何实际的工作。实际的工作都由插件来完成。生命周期好比接口,插件好比实现类。
maven 有三个独立的生命周期,clean、default、site。
生命周期阶段
每个生命周期包含一些生命周期阶段,这些阶段是有顺序的,后面的阶段依赖于前面的阶段。
clean生命周期包含的阶段:pre-clean、clean、post-clean
default生命周期包含的阶段:
1 process-sources、2 compile、3 process-test-sources、4 test-compile、5 test、6 package、 verify、8 install、9 deploy
1 处理主资源文件、2 编译主代码、3 处理测试资源文件、4 编译测试代码、5 运行测试、6 将编译好的代码打包、---- 、8 将包安装到本地仓库、9 将包安装到远程仓库
site生命周期包含的阶段:
pre-site、site(生成项目站点文档)、post-site、site-deploy(把生成的项目站点发布到服务器上)
生命周期阶段:mvn clean package ,表示执行生命周期阶段clean、package。
执行顺序:clean --> resources --> compile --> testResources --> testCompile --> test --> jar --> shade --> install
clear --> 清理target目录
resources --> 处理主资源
compile --> 编译主代码至target/classes目录
testResources --> 处理测试资源
testCompile --> 编译测试代码
test --> 测试
jar --> 打包到target目录下
shade --> 给hello-world-1.0-SNAPSHOT\META-INF\MANIFEST.MF 目录里添加Main-Class信息,如:Main-Class: com.juvenxu.mvnbook.helloworld.HelloWorld
install --> 把没有Main-Class信息的包添加到本地仓库。
要想执行shade插件,pom文件里要添加插件依赖如下,否则默认不执行shade;添加这个依赖后,无论在命令行还是在eclipse里都会执行shade插件。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>1.2.1</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>com.juvenxu.mvnbook.helloworld.HelloWorld</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
插件前缀
mvn dependency:tree
mvn org.apache.maven.plugins:maven-dependency-plugin:2.1:tree
上面两条命令的功能是一样的,第一条命令冒号前的dependency是org.apache.maven.plugins:maven-dependency-plugin:2.1插件的插件前缀。这个插件是官方插件,组Id默认就是org.apache.maven.plugins,版本号在超级pom里定义着。
生命周期阶段与插件目标内置绑定
比如:mvn clean
clean 生命周期阶段和 maven-clean-plugin:clean 插件目标内置绑定
生命周期阶段与插件目标自定义绑定
一个常见的例子是创建项目的源码jar包,我们可以把 maven-source-plugin 的 jar-no-fork 目标绑定到default生命周期的verify阶段上,在执行完集成测试和安装构件之前创建源码jar包。
配置如下:
<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>
命令行运行 mvn verify 或者 eclipse 里直接install结果如下:

有时候,即使不通过phase元素配置生命周期阶段,插件目标也能绑定到生命周期中。把上面的<phase>verify</phase>删掉,再次执行,也可以输出源码包。
原因:很多插件的目标已经默认绑定了某一个生命周期阶段。这里目标jar-no-fork被默认绑定到了package阶段。
插件参数
几乎所有maven插件的目标都有一些可配置的参数
命令行插件参数配置
mvn install -Dmaven.test.skip=true
pom中全局插件参数配置
有些参数的值从项目创建到发布都不会改变或很少改变,比如:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
这样不管是 maven-compiler-plugin:compile任务,还是 maven-compiler-plugin:testCompile 任务都会使用上面的配置。
为某个任务配置特定的参数,这是特定任务的配置,不是插件整体的配置

maven 生命周期、生命周期阶段、插件、目标的更多相关文章
- 项目构建之maven篇:6.生命周期与插件
项目生命周期 清理 初始化 编译 測试 打包 部署 三套生命周期 1.clean pre-clean 运行一些须要在clean之前完毕的工作 clean 移除全部上一次构建生成的文件 post-cle ...
- Maven专题3——生命周期与插件
三套生命周期 Maven有3套相互独立的生命周期,用户可以调用某个生命周期的阶段,而不会对其他生命周期产生影响. 每个生命周期包含一些有先后顺序的阶段,后面的阶段依赖于前面的阶段,意味着用户调用后面的 ...
- Maven构建的生命周期
什么是构建生命周期 构建生命周期是一组阶段的序列(sequence of phases),每个阶段定义了目标被执行的顺序.这里的阶段是生命周期的一部分.举例说明,一个典型的 Maven 构建生命周期是 ...
- maven入门-- part3 生命周期
简介: Maven有三套相互独立的生命周期,请注意这里说的是“三套”,而且“相互独立”,这三套生命周期分别是: Clean Lifecycle 在进行真正的构建之前进行一些清理工作. Default ...
- Maven - 构建生命周期、阶段、目标
版权所有,未经授权,禁止转载 章节 Maven – 简介 Maven – 工作原理 Maven – Repository(存储库) Maven – pom.xml 文件 Maven – 依赖管理 Ma ...
- maven(19)-生命周期和内置插件
生命周期和依赖一样,是maven中最重要的核心概念.平时在使用maven时并不一定需要知道生命周期,但是只有明白了生命周期,才能真正理解很多重要的命令和插件配置. default生命周期 defaul ...
- Maven整理笔记の生命周期和插件
项目构建的生命周期,其实软件开发人员每天都在干这个事,即项目清理.初始化.编译.测试.打包.集成测试.验证.部署和站点生成等,可以说几乎所有项目的构建都可以映射到这样一个生命周期上. Maven的插件 ...
- Maven - 深入理解maven构建生命周期和各种plugin插件
作者:亚当-adam 来源:CSDN 原文:https://blog.csdn.net/zhaojianting/article/details/80321488 版权声明:本文为博主原创文章,转载请 ...
- 介绍maven构建的生命周期
介绍maven构建的生命周期 这篇是 https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html 的 ...
- maven核心概念--生命周期
maven有一个命令,mvn package,该命令行并没有指定一个插件目标, 而是指定了一个Maven生命周期阶段.一个阶段是在被Maven称为"构建生命周期"中的一个步骤.生命 ...
随机推荐
- jmeter -- 在beanshell中拿到请求body参数和header参数
beanshell: import org.apache.jmeter.config.Arguments; import org.apache.jmeter.protocol.http.control ...
- centos7上安装redis
关闭防火墙:systemctl stop firewalld.service #停止firewallsystemctl disable firewalld.service #禁止firewall开机启 ...
- 如何在虚拟机安装的Win10系统里快速打开【此电脑】图标?(图文详解)
不多说,直接上干货! 为什么要写写这篇博客? 技多不压身,很多小技巧很重要,方便自己. 比如,对于这样的工具,个人来讲,玩过试用期,意味着你若不找点法子,是不行的.否则你没得玩了. 全网最详细的Tab ...
- Oracle中的层次查询详解
1 语法格式 select [level], column, expr... from table [where condition] start with condition connect by ...
- pygame游戏开发-简介
转自白月黑羽Python教程:http://www.python3.vip/doc/tutorial/python/game/ 推荐对Python有兴趣的童鞋可以关注去看看,教程语言平实,简单易懂. ...
- unity 图片变纯色填充
unity自带shader 即可
- java学习-sha1散列算法
直接调用HashKit.sha1(String str)方法就可以了,,返回的是16进制的字符串长度是40, 也就是用md.digest()方法解析出来的字节数是160字节长度. 而MD5散列算法生成 ...
- Django如何让未登录的用户自动跳转至登录页
有多种方法可以实现: 使用Django自带的用户认证 from django.contrib.auth.decorators import login_required @login_required ...
- 1-hadoop中遇到的各种异常
本贴记录学习hadoop中遇到的各种异常, 包括推荐系统分类下的和本分类下的, 持续更新 1, 搭建ha时, active和standy之间不能自由切换 经检查, 配置文件错误, 私钥配置 root ...
- C++调用C代码的两种方式
由于C++支持函数重载,在编译函数代码的时候会加上参数类型的信息,而C编译只有函数名信息,导致C++直接调用C代码在链接的时候会出现函数未定义的问题.解决这种问题有两种方法.方法一:在写C代码的时候考 ...