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称为"构建生命周期"中的一个步骤.生命 ...
随机推荐
- 导出数据库数据成txt格式
set verify off; set colsep ‘分隔符’; set echo off; set feedback off; set heading off; set pagesize 0; s ...
- Luogu P4670 [BalticOI 2011 Day2]Plagiarism 题解
我最近是不是数据结构学傻了啊... 这道题看是1e5,所以复杂度为\(O(nlogn)\)的是完全可以跑过去的,然后看题,要求的对于每个数满足要求的区间的长度之和,我们自然而然的就可以想到用FHQ-T ...
- SVN的安装和使用手册
下载`TortoiseSVN 官网下载址:https://www.visualsvn.com/visualsvn/download/tortoisesvn/ 下载完成后是这样的 安装TortoiseS ...
- Spring中的BeanPostProcessor
一.何谓BeanProcessor BeanPostProcessor是SpringFramework里非常重要的核心接口之一,我先贴出一段源代码: /* * Copyright 2002-2015 ...
- markdown编辑器(颜色、大小、字体)
<font face="黑体">我是黑体字</font> <font face="微软雅黑">我是微软雅黑</font ...
- fail2ban的使用以及防暴力破解与邮件预警
fail2ban可以监视你的系统日志,然后匹配日志的错误信息(正则式匹配)执行相应的屏蔽动作(一般情况下是防火墙),而且可以发送e-mail通知系统管理员! fail2ban运行机制:简单来说其功能就 ...
- [C语言]类型限定词const解析
作为C90增加的一个受限类型关键字,const赋予了它修饰的变量一个新属性——不变性,如果一个变量声明中带有关键字const,则无法通过赋值.增减运算来修改该变量的值. 一.指针与const结合 co ...
- redis-集群创建脚本
之前建好了redis集群, 但没有找到集群重启的机制, 停电2次, 重新创建太麻烦, 于是写了个脚本辅助启动 redis的创建过程可以看: http://www.cnblogs.com/wenbron ...
- 深入理解Java虚拟机:虚拟机类加载机制
目录 7.1 概述 7.2 类加载的时机 类的生命周期 5种情况需要"初始化" 7.3 类加载的过程 1.加载 2.验证 3.准备 4.解析 5.初始化 7.4 类加载器 类与类加 ...
- Servlet多文件上传方法
1. 通过getInputStream()取得上传文件. 001 /** 002 * To change this template, choose Tools | Templates 003 * ...