Maven pom.xml——dependency

 依赖

 

依赖标签

<project>
	<dependencies>
		<dependency>
			<groupId></groupId>
			<artifactId></artifactId>
			<version></version>
			<!-- 依赖类型,对应项目坐标定义中的packaging -->
			<type></type>
			<!-- 依赖范围
				compile:默认范围。编译依赖范围。编译、测试、运行有效。
				test:测试依赖范围。仅在编译、运行测试代码时有效。
				provided:已提供依赖范围。编译、测试有效。
				runtime:运行时依赖范围。测试、运行有效。
				system:系统依赖范围。编译、测试有效。必须通过systemPath显示指定依赖文件的路径。
				import:导入依赖范围。
			 -->
			<scope></scope>
			<!-- 标记依赖是否可选 -->
			<optional></optional>
			<!-- 排除传递性依赖 -->
			<exclusion></exclusion>
		</dependency>
	</dependencies>
</project>

依赖作用范围

scope编译测试运行
compileYYY
test——Y——
providedYY——
runtime——YY
systemYY——

 

例子:

compile:spring-core

test: JUnit

provide:servlet-api

runtime:JDBC驱动实现

system:本地的,Maven仓库之外的类库文件

 

依赖传递

A依赖B,B依赖C。

那么A对B为第一直接依赖,B对C为第二直接依赖,A对C为传递性依赖。

第一直接依赖于第二直接依赖决定了传递性依赖范围。

如图:最左边一列为第一直接依赖,最上边一行为第二直接依赖。

 

compiletestprovidedruntime
compilecompile————runtime
testtest————test
providedprovided——providedprovided
runtimeruntime————runtime

——表示 不传递依赖

注:可选依赖不会传递

依赖调解

原则一:路径最近者优先。

例:A->B->C->X(1.0.0)与A->D->X(2.0.0),X(1.0.0)路径长度3,X(2.0.0)路径长度2,解析X(2.0.0)。

原则二:第一声明者优先。

例:A->B->Y(1.0.0)与A->C->Y(2.0.0),如果B依赖声明在C依赖之前,那么解析Y(1.0.0)。

注:显示声明任何项目中任何直接用到的依赖。

原因:升级直接依赖时,相关传递性依赖也可能发生变化,不易察觉,可能导致当前项目出错,留下了潜在的威胁,也不好找,,这就不好了。所以最好显示声明任何项目中任何直接用到的依赖。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值