1 简单的核心概念

1.1 坐标

groupId、artifactId、version,很简单,这三个坐标定位到了该依赖的位置,有了它们就可以下载该依赖了。

1.2 依赖

如果一个jar包使用了另外一个jar包中的类,那么就说该jar包依赖另外一个jar包。

1.3 仓库

jar包放在仓库中,方便共享。

2 难的核心概念

2.1 生命周期

同一套生命周期的各个阶段之间是有相互依赖关系的,后面的阶段会依赖前面的阶段,也就是说,调用后面的阶段的时候会触发前面阶段的插件的执行。

比如maven test会触发它前面的validate、initialize、compile的执行。

触发生命周期阶段的执行本质上是触发该阶段对应的插件的执行。

2.1.1 生命周期和插件之间的关系

生命周期的工作是插件完成的,生命周期和插件协同工作,密不可分。

2.2 三套生命周期

每套生命周期之间是相互独立的,触发某套生命周期的时候不会对其它套生命产生影响。

2.2.1 clean生命周期

pre-clean->clean->post-clean

2.2.2 default生命周期

validate->initialize->compile->test->package->verify->install->deploy

2.2.3 site生命周期

这套生命周期可以不管。

生命周期是抽象的,具体的工作是由相应的插件完成的。

2.2 插件

2.2.1 常用的插件

maven-shade-plugin     maven-shade-plugin 只存在一个goal shade:shade,需要将其绑定到 phase package 上。

maven-compiler-plugin    编译。

maven-surefire-plugin       执行测试用例的插件。

protobuf-maven-plugin     默认绑定到generate-sources阶段,compiles main .proto definitions into Java files and attaches the generated Java sources to the project,所以,在java代码中可以访问到这些生成的java代码,这是如何做到的?

2.2.2 插件绑定

本质上是maven的生命周期的阶段和插件的目标相互绑定,用以完成实际的构建任务。

2.2.3 插件所绑定的生命周期

maven-compiler-plugin:compile <--> compile

maven-compiler-plugin:testCompile<-->test-compile

maven-surefire-plugin:test <--> test

maven-shade-plugin:shade<-->package

2.2.4 插件的目标

每个插件有多个目标,每个目标对应一个功能。

冒号前面是插件前缀,后面是插件目标。

2.2.5 一个生命周期对应一个插件目标

如果没有指定<phase>,那么就会绑定到插件默认的生命周期阶段上。如果插件没有默认生命周期阶段,那么插件目标将不会被执行。

当多个插件目标绑定到同一生命周期阶段的时候、顺序是按照插件声明的顺序来决定目标的执行顺序。

如果一个生命周期阶段有默认的插件目标,现在又设置了一个插件目标,那么设置的插件目标会覆盖默认的插件目标吗?

暂时认为是覆盖的。

2.3 继承和聚合

这个暂放。

3 各个插件参考资料

http://maven.apache.org/plugins/maven-compiler-plugin/index.html

maven的核心概念的更多相关文章

  1. 理解maven的核心概念

    原文出处:http://www.cnblogs.com/holbrook/archive/2012/12/24/2830519.html 好久没进行java方面的开发了,最近又完成了一个java相关的 ...

  2. Maven学习(四)-- Maven的核心概念

    摘自:http://www.cnblogs.com/xdp-gacl/p/4051819.html 一.Maven坐标 1.1.什么是坐标? 在平面几何中坐标(x,y)可以标识平面中唯一的一点. 1. ...

  3. maven的核心概念——生命周期

    第十一章生命周期 11.1 什么是Maven的生命周期 ●Maven生命周期定义了各个构建环节的执行顺序,有了这个清单,Maven就可以自动化的执行构建命令了. ●Maven有三套相互独立的生命周期, ...

  4. Maven入门-2.Maven一些核心概念介绍

    1.Maven仓库2.Maven坐标3.Maven插件和目标4.Maven生命周期4.1 clean:清理项目4.2 default:构建项目(重要)4.3 site:建立项目站点 1.Maven仓库 ...

  5. Maven 梳理 - 核心概念

    Maven坐标 依赖配置 依赖范围 依赖范围scope用来控制依赖和编译,测试,运行的classpath的关系. 主要的是三种依赖关系如下: 1.compile: 默认编译依赖范围.对于编译,测试,运 ...

  6. maven的核心概念——依赖

    一.STS集成maven(以下是mac版的STS) 1.点击Spring Tool Suite,点击preferences maven中的installations 点击add,选择对应的路径即可 点 ...

  7. maven的核心概念——POM

    Project Object Model:项目对象模型.将Java工程的相关信息封装为对象作为便于操作和管理的模型.Maven工程的核心配置.可以说学习Maven就是学习pom.xml文件中的配置. ...

  8. maven的核心概念——创建war工程

    第十七章第四个Maven工程(war工程) 17.1 创建步骤 ①第一步:创建maven web工程 ②第二步:修改web.xml <?xml version="1.0" e ...

  9. maven的核心概念——聚合

    第十六章聚合 16.1 为什么要使用聚合 将多个工程拆分为模块后,需要手动逐个安装到仓库后依赖才能够生效.修改源码后也需要逐个手动进行clean操作.而使用了聚合之后就可以批量进行Maven工程的安装 ...

随机推荐

  1. Mac Yosemite上安装macvim和YouCompleteMe

    今天在macvim上安装YouCompleteMe的时候,碰到一个运行vim崩溃的错误.查了半天终于解决! 先上一下安装macvim的过程 # install xcode and command li ...

  2. Atitit.js模块化 atiImport 的新特性javascript import

    Atitit.js模块化 atiImport 的新特性javascript import 1. 常见的js import规范amd ,cmd ,umd1 1.1. Require更多流行3 2. at ...

  3. 解决错误: ios property has a previous declaration

    今天维护一个项目的时候,我新添加了一个库,运行的时候报错了: ios property has a previous declaration 上网查了一下没有找到思路,不过根据提示自己试了一下,原来这 ...

  4. eclipse配置代码自动补全auto-completion

    你如果使用的是JAVA EE的模式,就这样配置: 1. Window>Preferences>Java>Editor>Content Assist>Auto Activa ...

  5. 启动storm之后浏览器访问报错,org.apache.thrift7.transport.TTransportException: java.net.ConnectException: Connection refused (Connection refused)

    原因是zookeeper没有启动 Internal Server Error org.apache.thrift7.transport.TTransportException: java.net.Co ...

  6. jquery Ajax Queue 队列实现

    有时候我们需要按顺序调用一组ajax,这些ajax需要有先后顺序,类似于同步的ajax,那么我们可以通过以下的方式来实现: (这个Ajax用到jQuery.post) //定义一个AJAX队列 $.n ...

  7. dirname(__FILE__) 的使用总结 1(转)

    dirname(__FILE__) php中定义了一个很有用的常数,即 __file__ 这个内定常数是当前php程序的就是完整路径(路径+文件名). 即使这个文件被其他文件引用(include或re ...

  8. impala+hdfs+parquet格式文件

    [创建目录]hdfs dfs -mkdir -p /user/hdfs/sample_data/parquet [赋予权限]sudo -u hdfs hadoop fs -chown -R impal ...

  9. Iptables详解+实例

    Iptabels是与Linux内核集成的包过滤防火墙系统,几乎所有的linux发行版本都会包含Iptables的功能.如果 Linux 系统连接到因特网或 LAN.服务器或连接 LAN 和因特网的代理 ...

  10. 手把手教你Chrome扩展开发:本地存储篇

    手把手教你开发chrome扩展一:开发Chrome Extenstion其实很简单 手把手教你开发Chrome扩展二:为html添加行为 手把手教你开发Chrome扩展三:关于本地存储数据 HTML5 ...