一、依赖范围
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. hadoop碰到的 一个问题

    在里面添加/usr/local/hadoop/etc/hadoop/log4j.properties log4j.logger.org.apache.hadoop.util.NativeCodeLoa ...

  2. java-05String课堂练习

    1.阅读以下代码查看输出结果 public class StringPool { public static void main(String args[]) { String s0="He ...

  3. ACM学习历程—Hihocoder 1139 二分·二分答案(bfs)

    http://hihocoder.com/problemset/problem/1139 这题提示上写的是二分,但是感觉不二分应该也可以,至少题目是AC的... 二分的思想就是二分答案的值,看能不能在 ...

  4. vue.js初学(一) vue的入门编程

    1:首先引入vue.js 2:点击事件 <div id='clickVue'> <p>{{message}}</p> <button v-on:click=& ...

  5. 浅谈K-D Tree

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

  6. boost_1.61.0编译安装

    1.下载源码boost_1_61_0.zip 2.进入目录 C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Tools\Shor ...

  7. bash 中的行处理命令 awk

    转自:http://blog.chinaunix.net/uid-23302288-id-3785105.html

  8. Oracle 静默安装的db_install.rsp 文件

    Oracle 静默安装的db_install.rsp 文件,已修改好值 ################################################################ ...

  9. Ubuntu16.04+TensorFlow r1.12环境搭建指南

    一.操作系统安装 OS版本:Ubuntu 16.04 (ubuntu-16.04.5-server-amd64.iso) CPU:4Core以上 内存:4GB以上 磁盘空间:80G以上 二.基础环境准 ...

  10. WINDOWS 7下的记事本程序目录

    这是win7的目录    系统所在分区:\Windows\system32\notepad.exe