前言
在 Maven 中,依赖范围(Scope)用于控制依赖在不同构建阶段的可用性,以及依赖是否会被传递到其他项目中。合理设置依赖范围可以优化项目结构、减少冲突,并确保构建的可重复性
Scope设置
compile
对于maven中,如果没有指定,默认使用该依赖范围,编译、测试、运行阶段均可用,打包时包含,并且具有传递性,如,定义一个项目
加入依赖
在其他项目中引入包
发现
fastjson
可以传递

provided
编译和测试阶段可用,在运行时,由容器提供,包是没有传递性的
引入到其他项目,fastjson没有引入

runtime
运行和测试阶段需要,但是编译住阶段不需要,但是具有传递性,如jdbc场景
test
仅测试阶段可用,编译和运行阶段不需要
import
import
在于导入其他 pom 的依赖管理配置,多用于dependencyManagement

system
系统依赖范围,多用于引用本地依赖
但是这种不推荐,尽量使用远程仓库,除非没有把包deploy到远程仓库
范围 | 编译期 | 测试期 | 运行期 | 打包时 | 传递性 |
---|---|---|---|---|---|
compile | ✅ | ✅ | ✅ | ✅ | ✅ |
provided | ✅ | ✅ | ❌ | ❌ | ❌ |
runtime | ❌ | ✅ | ✅ | ✅ | ✅ |
test | ❌ | ✅ | ❌ | ❌ | ❌ |
system | ✅ | ✅ | ❌ | ❌ | ❌ |
import | ❌ | ❌ | ❌ | ❌ | 特殊 |
总结
合理使用maven依赖,可以优化项目依赖结构等,