生命周期
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 生命周期、生命周期阶段、插件、目标的更多相关文章

  1. 项目构建之maven篇:6.生命周期与插件

    项目生命周期 清理 初始化 编译 測试 打包 部署 三套生命周期 1.clean pre-clean 运行一些须要在clean之前完毕的工作 clean 移除全部上一次构建生成的文件 post-cle ...

  2. Maven专题3——生命周期与插件

    三套生命周期 Maven有3套相互独立的生命周期,用户可以调用某个生命周期的阶段,而不会对其他生命周期产生影响. 每个生命周期包含一些有先后顺序的阶段,后面的阶段依赖于前面的阶段,意味着用户调用后面的 ...

  3. Maven构建的生命周期

    什么是构建生命周期 构建生命周期是一组阶段的序列(sequence of phases),每个阶段定义了目标被执行的顺序.这里的阶段是生命周期的一部分.举例说明,一个典型的 Maven 构建生命周期是 ...

  4. maven入门-- part3 生命周期

    简介: Maven有三套相互独立的生命周期,请注意这里说的是“三套”,而且“相互独立”,这三套生命周期分别是: Clean Lifecycle 在进行真正的构建之前进行一些清理工作. Default ...

  5. Maven - 构建生命周期、阶段、目标

    版权所有,未经授权,禁止转载 章节 Maven – 简介 Maven – 工作原理 Maven – Repository(存储库) Maven – pom.xml 文件 Maven – 依赖管理 Ma ...

  6. maven(19)-生命周期和内置插件

    生命周期和依赖一样,是maven中最重要的核心概念.平时在使用maven时并不一定需要知道生命周期,但是只有明白了生命周期,才能真正理解很多重要的命令和插件配置. default生命周期 defaul ...

  7. Maven整理笔记の生命周期和插件

    项目构建的生命周期,其实软件开发人员每天都在干这个事,即项目清理.初始化.编译.测试.打包.集成测试.验证.部署和站点生成等,可以说几乎所有项目的构建都可以映射到这样一个生命周期上. Maven的插件 ...

  8. Maven - 深入理解maven构建生命周期和各种plugin插件

    作者:亚当-adam 来源:CSDN 原文:https://blog.csdn.net/zhaojianting/article/details/80321488 版权声明:本文为博主原创文章,转载请 ...

  9. 介绍maven构建的生命周期

    介绍maven构建的生命周期 这篇是 https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html 的 ...

  10. maven核心概念--生命周期

    maven有一个命令,mvn package,该命令行并没有指定一个插件目标, 而是指定了一个Maven生命周期阶段.一个阶段是在被Maven称为"构建生命周期"中的一个步骤.生命 ...

随机推荐

  1. Vuejs 整合 MUi

    整合方法和使用axios的方法类似.具体步骤如下: 引入mui的css和js import mui from './lib/mui/js/mui.js' import './lib/mui/css/m ...

  2. invokespecial与invokevirtual指令的区别

    package com.test19; class Father { public void publicMethod() { privateMethod(); // this是Son对象,调用Fat ...

  3. C/C++ -- Gui编程 -- Qt库的使用 -- Qt窗体的类型状态布局

    -----工程WindowTest----- 1.-----窗体类型type.cpp----- #include <QtGui> int main(int argc, char * arg ...

  4. Python -- 数据结构实现

    1.堆栈(pyStack.py) class PyStack: def __init__(self, size=20): self.stack = [] self.size = size self.t ...

  5. mysql查看权限的命令

    mysql查看用户权限的命令 1.这里用来查看用户存储过程: show grants for 用户; eg: show grants for root@'localhost';#这样就会把root用户 ...

  6. 什么是Java序列化?为什么序列化?序列化有哪些方式?

    先普及一下,计算机中无法识别一个基本单元[字节]来表示,必须经过“翻译”才能让计算机理解人类的语言,这个翻译过程就是[编码],通常所说的字符转换为字节.  有I/O的地方机就会涉及编码,现在几乎所有的 ...

  7. Vue前端框架面试问题

    1.active-class是哪个组件的属性?嵌套路由怎么定义? 答:vue-router模块的router-link组件. 2.怎么定义vue-router的动态路由?怎么获取传过来的动态参数? 答 ...

  8. 笔记六:python字符串运算与函数

    一:学习内容 字符串运算 字符串函数-strip() 字符串函数-大小写互换 字符串函数-字符串对齐 字符串函数-搜索 字符串函数-替换 字符串函数-split切割 字符串函数-连接join 字符串函 ...

  9. Mongodb同步数据到hive(二)

    Mongodb同步数据到hive(二) 1.            概述 上一篇文章主要介绍了mongodb-based,通过直连mongodb的方式进行数据映射来进行数据查询,但是那种方式会对线上的 ...

  10. 15.Generator 函数的语法

    Generator 函数的语法 Generator 函数的语法 简介 基本概念 Generator 函数是 ES6 提供的一种异步编程解决方案,语法行为与传统函数完全不同.本章详细介绍 Generat ...