Maven的依赖

依赖声明:
依赖声明主要包含如下元素:

<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.10</version>
			<scope>test</scope>
		</dependency>		
	</dependencies>

也可以用来声明父类中的依赖(这里的parent是继承的原因,继承的父类中的pom),在Hello项目的pom.xml文件中声明了一个依赖(代码如上),但是MavenDependencies中出现了两个jar包

在这里插入图片描述
主要原因是junit和hamcrest是两个不同的框架,不同的东西,只不过junit使用了hamcrest框架而已(我觉得此处也可以说junit依赖于hamcrest)从依赖的传递性来讲这有两个jar包。

而在HelloFriend中声明了两个依赖:

<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.9</version>
			<scope>test</scope>
		</dependency>		
		
		<dependency>
			<groupId>cn.rjxy.maven</groupId>
			<artifactId>Hello</artifactId>
			<version>0.0.1-SNAPSHOT</version>
			<scope>compile</scope>
		</dependency>		

分别是依赖与Hello和junit,根据依赖的传递性所以在HelloFriend的MavenDependencies中存在3个依赖

依赖的传递性:
在这里插入图片描述
然后在MakeFriends中声明三个依赖后:

<parent>
		<groupId>cn.rjxy.maven</groupId>
		<artifactId>Parent</artifactId>
		<version>0.0.1-SNAPSHOT</version>
		<relativePath>../Parent/pom.xml</relativePath>
	</parent>
	<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
		</dependency>
		<dependency>
			<groupId>cn.rjxy.maven</groupId>
			<artifactId>HelloFriend</artifactId>
		</dependency>
	</dependencies>

可想而知在MakeFriends的MavenDependencies中会有4和依赖,分别是junit,hamcrest,Hello,HelloFriend
在这里插入图片描述
这就是maven中的最简单的依赖。且maven中最简单的依赖传递性规则是:
传递性依赖和可选依赖
a.路径最近者优先
b.路径相同,第一声明者优先
在Hello中继续添加依赖:
多加了一个1.2.16版本的log4j

<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.9</version>
			<scope>test</scope>
		</dependency>		
		<dependency>
			<groupId>log4j</groupId>
			<artifactId>log4j</artifactId>
			<version>1.2.16</version>
		
		</dependency>	
	</dependencies>

在Hello Friends里面再声明一个1.2.14版本的log4j依赖:

<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.9</version>
			<scope>test</scope>
		</dependency>		
		
		<dependency>
			<groupId>cn.rjxy.maven</groupId>
			<artifactId>Hello</artifactId>
			<version>0.0.1-SNAPSHOT</version>
			<scope>compile</scope>
		</dependency>		
		<dependency>
			<groupId>log4j</groupId>
			<artifactId>log4j</artifactId>
			<version>1.2.14</version>
		
		</dependency>	
	</dependencies>

此时打开HelloFriends的mavenDependencies中出现的是1.2.14版本的log4j
在这里插入图片描述

由此可见,依赖传递时路径最近者优先。而路径相同,第一声明者优先也一样。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值