Java学习记录 Maven依赖

本文详细介绍了Maven的依赖管理,包括依赖范围(scope)的概念,如何控制依赖在不同环境的应用;依赖传递的机制,项目如何自动引入间接依赖;以及如何通过依赖排除来精细化管理依赖,避免版本冲突问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Maven依赖

依赖管理

项目依赖管理 ,pom.xml 文件中定义jar包的GAV坐标,

<dependencies>
	<dependency>
        <!--依赖 GAV坐标-->
		<groupId>junit</groupId>
		<artifactId>junit</artifactId>
		<version>4.10</version>
        <!--依赖范围-->
		<scope>test</scope>
	</dependency>
</dependencies>

依赖范围(scope)

依赖范围用于限制依赖的环境应用,指定何时提供依赖及分类路径

依赖范围值(scope)说明
compile(默认值)项目的所有类路径中提供
(为所有类编译提供依赖)
provided编译和测试时需要,jar包不进行打包
(以防运行环境已经存在相同的包发生冲突)
runtime测试、运行时需要
test测试时需要,但不进行打包
······
依赖范围主类编译路径测试编译路径打包且编译时有效
compileYYY
providedYY-
runtime--Y
test-Y-

依赖传递

在项目往往需要引入多个依赖, 而引入的依赖又会引入其他的依赖,项目会自动引入依赖中的依赖!

假设 A项目 引入 B 和 E 依赖 ,他们有各自的依赖关系

A => B
B => C
C => D
A => E
E => D

  A项目
  |
  ├── B
  │   └── C
  │       └── D(2.0)
  └── E
      └── D(1.0)

最后 A项目 导入了D(1.0),排除D(2.0)

系统会根据导入的就近原则进行依赖应用

依赖排除

Maven 的依赖传递过程可选择性的排除依赖。如果依赖中有其他依赖可对其进行排除!

<dependency>
	<groupId>junit</groupId>
	<artifactId>junit</artifactId>
	<version>4.11</version>
	<!--排除依赖-->
	<exclusions>
		<exclusion>
			<groupId>org.hamcrest</groupId>
			<artifactId>hamcrest-core</artifactId>
            <!--排除依赖无需版本号-->
		</exclusion>
	</exclusions>
</dependency>

PS:排除依赖包中所包含的依赖关系,不需要添加版本号

假如我想在 上面假设中排除D(1.0),引入D(2.0)

···
<!--引入B依赖-->
<dependency>
	<groupId>B</groupId>
	<artifactId>B</artifactId>
	<version>0.1</version>
   	<!--排除依赖-->
	<exclusions>
        <!--排除 B依赖 中的 依赖C-->
		<exclusion>
			<groupId>D</groupId>
			<artifactId>D</artifactId>
            <!--排除依赖无需版本号-->
		</exclusion>
	</exclusions>
</dependency>
<!--引入E依赖-->
<dependency>  
	<groupId>E</groupId>
	<artifactId>E</artifactId>
	<version>0.1</version>
</dependency> 
···
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值