一、依赖范围
Maven在编译项目主代码的时候,需要使用一套classpath——编译classpath;
在编译和执行测试的时候,使用另一套classpath——测试classpath;
实际运行Maven项目的时候,又会使用一套classpath——运行classpath。
【依赖范围】就是用来控制依赖与这三种classpath的关系,Maven有以下几种依赖范围:

1、compile:编译依赖范围
默认,对编译、测试、运行三种classpath都有效,如spring-core.
2、test:测试依赖范围
只对测试classpath有效,如JUnit。
3、provided:已提供依赖范围
对编译和测试classpath有效,但对运行时无效,如Tomcat容器的servlet-api,编译和测试项目需要,但运行项目时,容器已经提供。
4、runtime:运行时依赖范围
对于测试和运行classpath有效,但在编译主代码时无效,如JDBC驱动实现,项目主代码的编译只需要JDK提供的JDBC接口,只有在执行测试或运行时才需要实现上述接口的具体JDBC驱动。
5、system:系统依赖范围
该依赖于三种classpath的关系,和provided依赖范围完全一致,但往往与本机系统绑定,可能造成构建的不可移植,因此应该谨慎使用。
6、import:导入依赖范围
该依赖范围不会对三种classpath产生实际的影响。
 
二、传递性依赖
如图,若A有一个compile范围的依赖B,B有一个compile范围的依赖C,那么C就会成为A的compile范围依赖。
C是A的一个传递性依赖。
若:
A对于B是第一直接依赖;
B对于C是第二直接依赖;
A对于C是传递性依赖;
则:
 
其中,左一列是第一直接依赖范围,上一行是第二直接依赖范围,中间就是传递性依赖的范围。
 
三、可选依赖
 
 
使用optional元素表示两个依赖为可选依赖,它们只会对B产生影响,当其他项目依赖于B的时候,这两个依赖不会被传递,就需要在A中显示地声明出来mysql-connector-java、或postgresql。
在理想的情况下,是不应该使用可选依赖的!!
 
 
四、排除依赖
项目A依赖于项目B,但是由于一些原因,不想引入传递性依赖C,而是自己显示地声明对于项目C的版本依赖,可在代码中使用exclusions元素声明排除依赖。exclusions可以包含一个或者多个exclusion子元素,且exclusion只需要groupId和artifactId。
五、归类依赖
例如,对Spring Framework的依赖来自同一项目的不同模块,所有这些依赖的版本都是相同的,如果将来需要升级Spring Framework,这些依赖的版本会一起升级。
 
六、优化依赖
dependency:list
dependency:tree
dependecy:analyze
 
 
 
 

《Maven实战》笔记-2-坐标和依赖的更多相关文章

  1. Maven入门指南③:坐标和依赖

    1 . 坐标 maven 的所有构件均通过坐标进行组织和管理.maven 的坐标通过 5 个元素进行定义,其中 groupId.artifactId.version 是必须的,packaging 是可 ...

  2. [maven] 实战笔记 - 构建、打包和安装maven

    ① 手工构建自己的maven项目 Maven 项目的核心是 pom.xml.POM (Project Object Model,项目对象模型)定义了项目的基本信息,用于描述项目如何构建,声明项目依赖等 ...

  3. [Maven实战](9)传递性依赖

    了解Spring的朋友都知道.创建一个Spring Framework项目都须要依赖什么样的Jar包.假设不使用Maven,那么在项目中就须要手动下载相关的依赖.因为Spring Framework又 ...

  4. maven实战(02)_坐标详解

    (一)  何为mave坐标 maven的世界中拥有数量非常巨大的构件,也就是平时用的一些jar,war等文件. maven定义了这样一组规则: 世界上任何一个构件都可以使用Maven坐标唯一标志,ma ...

  5. [maven] 实战笔记 - maven 安装配置

    1.下载地址http://maven.apache.org/download.html 2.windows下安装maven(1)下载 apache-maven-3.0-bin.zip 解压到任意目录下 ...

  6. 【转】Maven实战(七)---传递依赖

    原博文出自于:http://blog.csdn.net/liutengteng130/article/details/47000069   感谢! 假设A-->C  B-->A      ...

  7. maven第5章坐标和依赖

    5.5依赖范围 runtime:运行时依赖范围 举的例子是JDBC驱动实现,不理解? 编译的时候只需要引入jdk提供的jdbc类和方法,比如java.sql.*;这时编译没有报错,但是没有引入mysq ...

  8. 《Maven实战》关联实际工作的核心知识

    通读了<Maven实战>这本书,由于在实际的工作中,对其有一定的操作上的经验.因此,再回头去通读这本书,就能够更加精准的把握里面的核心知识了. 以下我主要从两点去介绍之—— 1> m ...

  9. Maven - Maven3实战学习笔记(2)坐标和依赖

    1.maven坐标元素 maven坐标元素包括:groupId.artifactId.version.packaging.classifier. classifier:定义输出的附属构件.groupI ...

  10. Maven学习笔记—坐标和依赖

    Maven的坐标和依赖 1 Maven坐标 1.1 什么是Maven坐标 Maven坐标:世界上任何一组构件都可以使用Maven坐标来唯一标识,Maven坐标的元素包括groupId.artifact ...

随机推荐

  1. CodeForces 589H Tourist Guide

    传送门 题目大意 给定$n$个点$m$条边的无向图,有$K$个关键点,你要尽可能的让这些关键点两两匹配,使得所有点对之间可以通过简单路径连接且任意两个简单路径没有重复的边(可以是共同经过一个点),输出 ...

  2. Restoring Road Network(Floyd算法的推广)

    个人心得:看懂题目花费了不少时间,后面实现确实时间有点仓促了,只是简单的做出了判断是否为真假的情况, 后面看了题解发现其实在判断时候其实能够一起解决的,算了,基础比较差还是慢慢的来吧. 题意概述: 就 ...

  3. UOJ348. 【WC2018】州区划分

    UOJ348. [WC2018]州区划分 http://uoj.ac/problem/348 分析: 设\(g(S)=(\sum\limits_{x\in S}w_x)^p[合法]\) \(f(S)\ ...

  4. asp.net 打印控件使用方法

    打印的效果及控制性虽然不是很好,但是也能勉强使用,应付一般的打印还是 可以的了.代码如下所示: 代码 复制代码 代码如下: //调用PrintControl.ExecWB(?,?)实现直接打印和打印预 ...

  5. Js里头的对象字面量

    JavaScript 对象字面量 在编程语言中,字面量是一种表示值的记法.例如,"Hello, World!" 在许多语言中都表示一个字符串字面量(string literal ) ...

  6. gulp之sass 监听文件,自动编译

    gulpfile.js文件如下: var gulp = require('gulp'); var sass = require('gulp-sass'); gulp.task('default', f ...

  7. ICanPay介绍

    ICanPay介绍 ICanPay是一个支持多商户多种支付方式的跨平台网关处理类库,使用ICanPay可以简化订单的创建.查询.退款和接收网关返回的支付通知等操作. 目前支持的支付网关有:支付宝(Al ...

  8. Java-API-Package:org.springframework.stereotype

    ylbtech-Java-API-Package:org.springframework.stereotype 1.返回顶部 1. @NonNullApi @NonNullFields Package ...

  9. c# 窗口API,以及全屏锁定一些tips

    this.WindowState = FormWindowState.Maximized; this.FormBorderStyle = FormBorderStyle.None; /* FormBo ...

  10. #pragma pack 在BITMAP结构体定义中的使用

    BITMAP位图文件主要分为如下3个部分: 块名称 对应Windows结构体定义 大小(Byte) 文件信息头 BITMAPFILEHEADER 14 位图信息头 BITMAPINFOHEADER 4 ...