转载:http://blog.csdn.net/J080624/article/details/54692444

什么是依赖?

当 A.jar 包用到了 B.jar 包时,A就对B产生了依赖;

在项目中以依赖的方式引入一个jar:

使用dependency标签指定被依赖的jar的坐标即可。

    <dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.0</version>
<scope>test</scope>
</dependency>

依赖的范围

注意上述最后一项:scope,表明依赖的范围。最常用的三个范围:test compile provided。


依赖的其他作用域:

runtime:表示该依赖项只有在运行时才是需要的,在编译的时候不需要。这种类型的依赖项将在运行和test的类路径下可以访问。

system:当scope为system时,表示该依赖项是我们自己提供的,不需要Maven到仓库里面去找。

指定scope为system需要与另一个属性元素systemPath一起使用,它表示该依赖项在当前系统的位置,使用的是绝对路径。

依赖的传递性

A 依赖 B,B 依赖 C,那么 A 是否可以使用 C 呢?

答:如果 B 依赖 C 的范围是compile,就可以依赖;否则,不可。【test provided 范围的依赖是不可以传递的!】


依赖的原则

① 路径最短者优先


② 路径相同时先声明着优先

如下图,同时依赖HelloFriend和OurFriends,但是二者所依赖的log4j不同。那么MakeFriends将会依赖 pom.xml中,先声明的那个工程的log4j。


依赖的排除

如果不想使用依赖的jar,那么可以在pom.xml文件中配置:

            <exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>

Maven的生命周期

Maven生命周期定义了各个构建环节的执行顺序,有了这个清单,Maven就可以自动化的执行构建命令了。

Maven有三套相互独立的生命周期,分别是:

① Clean Lifecycle在进行真正的构建之前进行一些清理工作;

② Default Lifecycle 构建的核心部门,编译、测试、打包、安装、部署等等;

③ Site Lifecycle 生成项目报告 ,站点。发布点(没用过)。

它们是相互独立的,可以仅仅调用clean来清理工作目录,仅仅调用site来生成站点。当然你也可以直接运行 mvn clean install site 运行所有这三套生命周期。


每套生命周期都由一组阶段(Phase)组成,我们平时在命令行输入的命令总会对应于一个特定的阶段。 
比如,运行 mvn clean,这个clean是Clean 生命周期的一个阶段。有 Clean 生命周期,也有 clean阶段。

① Clean生命周期:

  • pre-clean 执行一些需要在clean之前完成的工作;
  • clean 移除所有上一次构建生成的文件;
  • post-clean执行一些需要在clean之后立刻完成的工作

② Site生命周期:

  • pre-site 执行一些需要在生成站点文档之前完成的工作;
  • site 生成项目的站点文档;
  • post-site 执行一些需要在生成站点文档之后完成的工作,并且为部署做准备;
  • site-deploy 将生成的站点文档部署到特定的服务器上;

这里经常使用到的site阶段和site-deploy阶段,用于生成和发布Maven站点。

③ Default 生命周期

Default生命周期是Maven生命周期中最重要的一个,绝大部分工作都发生在这个生命周期中。

比较重要且常用的阶段:

validate
generate-sources
process-sources
generate-resources
process-resources 复制并处理资源文件,至目标目录,准备打包; compile 编译项目的源代码 process-classes
generate-test-sources
process-test-sources
generate-test-resources
process-test-resources复制并处理资源文件,至目标测试目录; test-compile 编译测试源代码 process-test-classes test 使用合适的单位测试框架运行测试;这些测试代码不会被打包或部署。 prepare-package
package 接受编译好的代码,打包成可发布的格式,如JAR; pre-integration-test
integration-test
post-integration-test verify
install 将包安装至本地仓库,以让其他项目依赖;
deploy 将最终的包复制到远程的仓库,以让其他开发人员与项目共享或部署到服务器上运行。

生命周期与自动化构建

运行任何一个阶段的时候,它(同一生命周期)前面的所有阶段都会被运行。

例如我们运行 mvn install 的时候,代码会被 编译、测试、打包。这就是Maven为什么能够自动执行构建过程的各个环节的原因。

此外 ,Maven的插件机制是完全依赖Maven的生命周期的!

参考:

1、https://www.jianshu.com/p/6d72c5090e80

2、http://wiki.jikexueyuan.com/project/maven/build-life-cycle.html

maven生命周期和依赖的范围的更多相关文章

  1. Maven实战:Maven生命周期

    前言 之前有写过一篇文章Maven实战,介绍了Maven的一些基本概念,以及对于一个初学者而言的Maven基础知识,当时在我看来掌握了这些基本是够用的. 随着工作的深入,越来越感觉对于Maven的理解 ...

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

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

  3. Maven生命周期小记

    1.Maven生命周期是为了所有的构建过程进行抽象和统一.Maven从大量的项目和构建工具中学习和反思,总结了一套高度完善.易扩展的生命周期.这个生命周期包含了项目的清理.初始化.编译.测试.打包.集 ...

  4. maven权威指南学习笔记(四)—— maven生命周期(lifecycle)

    定义: 生命周期是包含在一个项目构建中的一系列有序的阶段 举个例子来说就是maven 对一个工程进行: 验证(validate) -- 编译源码(compile) -- 编译测试源码(test-com ...

  5. maven生命周期和插件

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

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

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

  7. maven系列(3)-maven生命周期的介绍

    1. 概述 Maven有三套相互独立的生命周期,请注意这里说的是"三套",而且"相互独立",初学者容易将Maven的生命周期看成一个整体,其实不然.这三套生命周 ...

  8. Java-Maven(三):Maven坐标、Maven仓库、Maven生命周期

    之前通过学习对maven命令有了部分了解,但是只是知道maven是用来做什么.但到目前位置还不足以全面的了解maven,为更全面的了解maven,需要学习以下几个概念:Maven坐标.Maven仓库. ...

  9. nexus私服搭建及maven生命周期

    一.maven找库流程 从流程上看创建nexus私服,能够优化流程,而且更加快速 二.nexus下载.安装 1.nexus下载地址 https://sonatype-download.global.s ...

随机推荐

  1. SQLite-Like语句

    SQLite – LIKE子句 使用SQLite LIKE运算符 用于匹配文本.如果搜索表达式可以匹配模式表达式,如操作符将返回true,这是1.有两个通配符与Like操作符一起使用: The per ...

  2. jxcel - 好用的Excel与Java对象转换工具

    更多精彩博文,欢迎访问我的个人博客 Jxcel简介 Jxcel是一个支持Java对象与Excel(目前仅xlsx.xls)互相转换的工具包. 项目地址:https://github.com/jptan ...

  3. forward reference extends over definition of value

    在scala代码中定义了一个方法,,刚开始直接代码中报错,,后来编译是一直报错,最后只是在sc.stop后边加了一个中括号解决,方法体不能放在main主函数中

  4. 制作JPEGImages出现的bug

    我用的是下面这个脚本进行改名字: import os import sys path = "/home/bnrc/py-faster-rcnn/data/VOCdevkit2007/VOC2 ...

  5. ERROR StatusLogger Log4j2 could not find a logging implementation. Please add log4j-core to the classpath

    问题: ERROR StatusLogger Log4j2 could not find a logging implementation. Please add log4j-core to the ...

  6. Oracle清空数据库中数据表数据的方法

    一.简介最近在项目发版测试的时候,导出dmp的时候不小心把开发库中的一些脏数据导出来了,测试那边导入进去之后一堆不规范的数据,为了不影响测试结果,于是总结了一个快速清空数据库数据表所有数据的方法. 二 ...

  7. 洛谷——P3939 数颜色(暴力vecotr+二分)

    P3939 数颜色 $vecotr$里二分就是好用,全是$STL$ 颜色数目比较少,可以对每一种颜色弄一个$vector$记录一下,查找$l,r$内颜色数为$x$的兔子数,直接在$G[x]$这个$ve ...

  8. luogu P2241 统计方形

    题目背景 1997年普及组第一题 题目描述 有一个n*m方格的棋盘,求其方格包含多少正方形.长方形 输入输出格式 输入格式: n,m因为原来数据太弱,现规定m小于等于5000,n小于等于5000(原来 ...

  9. Mysql 一对多关系建立(在navicat中)

    一个孩子只有一个妈妈,而一个妈妈可以有多个孩子,这是典型的一对多的关系,这里采用navicat图形化界面建立二者的关系. 第一步:创建mother表,如下图: 第二步:创建children表,在chi ...

  10. Python旅途——函数(1)

    函数 简介 到目前为止,我们一直所接触的都是属于面向过程编程,这样的代码会降低代码的可读性,因此引入了函数式编程,在后面我们还会学到面向对象编程. 函数式编程 函数本质:将N行代码拿到别处,并给他起个 ...