scope作用:决定 dependency 的jar的作用范围。即控制 Jar 包在哪些周期被加载和使用。
项目周期:编译、测试、打包、运行。
编译和运行也可分为:测试代码的编译和运行、非测试代码的编译和运行。一般情况下,编译和运行是指非测试代码的编译和运行,测试是指测试代码的编译和运行。
打包:一般情况下,指的是mvn package且打包格式是war之类(附带依赖包的),非默认的jar。
scope取值:compile、test、runtime、provided、system、import。
scope默认值:compile。
compile什么都不配置,默认值compile。
作用范围:编译、测试、打包、运行。
依赖传递:会传递到依赖的上层项目中。
test作用范围:测试。
依赖传递:不会传递依赖。
runtime作用范围:测试、打包、运行。
依赖传递:会传递。
provided作用范围:编译、测试。
依赖传递:不会传递依赖。
provided意味着打包的时候不会包进去,在打包阶段做了exclude的动作,别的容器(Web Container)会提供。
system不推荐使用。也provided类似,但是maven不会在repository查找,而是从本地文件系统拿,一定要配合systemPath属性使用。
import(Maven 2.0.9 之后新增)import只使用在
继承引入依赖:
org.springframework.boot spring-boot-starter-parent2.4.6
非继承引入依赖:可引入多个模块依赖
依赖范围总结 scope的依赖传递com.yzh test-parent11.0.0-SNAPSHOT pom import com.yzh test-parent21.0.0-SNAPSHOT pom import
A–>B–>C。A依赖于B,B依赖于C。A和C的依赖关系:
当C的scope是test或者provided时,C直接被丢弃,A不依赖C;
否则A依赖C,C的scope继承自B的scope,即B的scope是什么,C在A中的scope就是什么。
一张依赖传递图(感觉直接依赖compile和间接依赖runtime的结果不太对):
暑期编程PK赛 得CSDN机械键盘等精美礼品!



