一、依赖范围
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. expect 切换用户

    安装expect yum install expect -y #!/bin/expect -f spawn su - expect "Password:" send "n ...

  2. BZOJ4170:极光

    浅谈离线分治算法:https://www.cnblogs.com/AKMer/p/10415556.html 题目传送门:https://lydsy.com/JudgeOnline/problem.p ...

  3. 浅谈K-D Tree

    初步认识\(K-D\) \(Tree\) \(K-D\) \(Tree\)是一种基于空间分割的二叉树形数据结构,一般用于高维信息检索.因为\(OI\)中很多问题都能转化为高维信息检索,所以\(K-D\ ...

  4. CentOS 7安装Azcopy

    Azcopy是Azure存储一个非常好用的工具.本文将介绍如何在CentOS7下安装的过程. 更新:目前需要.net core 2.0版本.具体下载地址大家自己搜索. 1 安装.net core 1. ...

  5. array_diff函数的注意事项

    array_diff — 计算数组的差集 说明: array array_diff ( array $array1 , array $array2 [, array $... ] ) 对比返回在 ar ...

  6. U盘操作

    一.8G的U盘被设置为2G,如何恢复 1.下载usboot 1.7 打开以后,选中U盘,点击[点击此处选择工作模式],选择[用0重置参数] ,然后点[开始].2.完成后它会提示拔下U盘,此时拔下U盘, ...

  7. Python:列表中,增加元素、删除元素、切片、其它

    一.向列表中增加元素 list.append(单个元素):在list列表末端增加一个元素: list.extend([元素1,元素2]):在list列表末端增加多个元素: list.insert(元素 ...

  8. MySQL脚本自动安装mysql-5.6.15-linux-glibc2.5-x86_64.tar.gz

    脚本安装mysql-5.6.15-linux-glibc2.5-x86_64.tar.gz 先准备好数据文件的路径 softdir='/data/soft' 把脚本和tar包放在相应的路径下,其实就是 ...

  9. Eclipse中Next Difference的快捷键

    原文:http://stackoverflow.com/questions/10177460/is-there-a-key-binding-for-next-difference-and-previo ...

  10. 触摸事件MultiTouch Events

    备注: userInteractionEnabled = NO hidden = YES alpha = 0.0~0.01    //如果上面三个属性被设置了则无法接收触摸事件 1.- (void)t ...