本文主要是针对《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生命周期与插件的更多相关文章

  1. maven生命周期和插件

    maven生命周期和插件 生命周期 maven的生命周期有三套,互相独立.每个生命周期含有不同阶段,常用如下 clean 清理项目 pre-clean 执行清理前需要完成的工作 clean 清理上一次 ...

  2. [maven] 生命周期和插件

    maven生命周期和插件 生命周期 maven的生命周期有三套,互相独立.每个生命周期含有不同阶段,常用如下 clean 清理项目 pre-clean 执行清理前需要完成的工作 clean 清理上一次 ...

  3. 05 Maven 生命周期和插件

    Maven 生命周期和插件 除了坐标.依赖以及仓库之外, Maven 另外两个核心概念是生命周期和插件.在有关 Maven 的日常使用中,命令行的输入往往就对应了生命周期,如 mvn package ...

  4. MAVEN学习笔记之Maven生命周期和插件简介(3)

    MAVEN学习笔记之Maven生命周期和插件简介(3) clean compile site三套生命周期相互独立. clean pre-clean 执行清理前的工作 clean 清理上一次构建生成的所 ...

  5. Maven系列学习(三)Maven生命周期和插件

    Maven生命周期和插件 Maven另外的两个核心概念就是生命周期和插件,Maven的生命周期都是抽象的,其实实际行为都是由插件来完成的,生命周期和插件两者协同工作 1.生命周期 Maven的生命周期 ...

  6. (十二)Maven生命周期和插件

    除了坐标.依赖以及仓库之外,Maven的另外两个核心概念是生命周期和插件.在有关Maven的日常使用中,命令行的输入往往就对应了生命周期,如mvn package就表示执行默认生命周期阶段packag ...

  7. Maven生命周期和插件机制

    Maven中的一个非常重要的概念是生命周期和插件,这篇文章重点介绍下Maven的生命周期. Maven的生命周期是抽象的,具体的功能是有具体的插件来完成的,Maven有相当多的功能插件,以至于Mave ...

  8. Maven生命周期(插件)

    maven拥有三套相互独立的生命周期,它们分别是clean,default和site.clean生命周期的目的是清理项目,default生命周期的目的是构建项目,而site 生命周期的目的是建立项目站 ...

  9. maven生命周期和插件详解

    生命周期 什么是生命周期? maven的生命周期就是对所有的构建过程进行抽象和统一.maven从大量项目和构建工具中总结了一套高度完善的.易扩展的生命周期.这个生命周期包含项目的清理.初始化.编译.测 ...

随机推荐

  1. JavaScript:正则表达式匹配规则

    正则表达式的语法规则: <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...

  2. Jmeter(9)常用定时器

    测试计划中元件的执行顺序依次为: 配置元件--逻辑控制器--前置处理器--定时器--取样器--后置处理器--断言--监听器 一.定时器作用域 1.定时器是在每个取样器之前执行的,无论定时器是在取样器之 ...

  3. js下 Day14、面向对象案例

    一.软键盘拖拽 效果图: ![img](file:////Users/sairitsutakara/Library/Group%20Containers/UBF8T346G9.Office/Tempo ...

  4. vue第十三单元(指令的作用,指令的钩子函数)

    第十三单元(指令的作用,指令的钩子函数) #课程目标 1.了解自定义指令的应用场景 2.掌握自定义全局和局部指令 3.掌握指令的钩子函数 #知识点 #一.认识自定义指令 除了核心功能默认内置的指令 ( ...

  5. Spring MVC整合 freemarker

    1.什么是Spring MVC? Spring MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将Web层进行职责解耦,基于请求驱 ...

  6. rocketMq 消息偏移量 Offset

    消息偏移量 Offset queue0 offset 0   0-20  offset 4  20-40 纠错:每条消息的tag对应的HashCode. queue1 offset 1  0-20   ...

  7. Appium常用的3种元素定位方式

    以最右App为例 .apk文件网盘地址: 链接:https://pan.baidu.com/s/1L4MYkhpb5ECe8XeaneTx_Q 提取码:0jqm 1.find_element_by_i ...

  8. 教你如何修改Python的pip源镜像

    PS:在pip install安装扩展库的时候,遇到安装超时失败,可能是因为国外镜像被屏蔽了. 可以使用国内开放的pip源: 阿里云 http://mirrors.aliyun.com/pypi/si ...

  9. 每天学习一点ES6(二)let 和 const

    let 命令 let 和 var 差不多,只是限制了有效范围. 先定义后使用 不管是什么编程语言,不管语法是否允许,都要秉承先定义,然后再使用的习惯,这样不会出幺蛾子.以前JavaScript比较随意 ...

  10. php学习之sqlite查询语句之多条件查询

    一.PHP+Mysql多条件-多值查询示例代码: index.html代码:<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitio ...