提问人:Bryan Tan 提问时间:2/18/2022 更新时间:2/19/2022 访问量:673
为什么测试范围依赖关系会在 Maven 中拉取编译范围依赖关系?
Why do test scope dependencies pull compile scope dependencies in Maven?
问:
目前我的项目使用 spring boot starter 测试,如下所示:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<version>2.3.8.RELEASE</version>
<scope>test</scope>
</dependency>
但是,尽管有测试范围,但它将spring-core(在此版本中是易受攻击的tpl)作为编译范围传递依赖项,并且它出现在我编译的二进制文件中。
我知道我可以通过在测试范围内显式拉取spring-core来解决这个问题:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.2.12.RELEASE</version>
<scope>test</scope>
</dependency>
但是,这不应该是必需的。为什么仅在测试中可用的依赖项将依赖项拉入编译范围?
答:
0赞
Bryan Tan
2/19/2022
#1
在 J Fabian Meyer 发表评论后,我仔细检查了一遍。当 spring core 出现在依赖树中的 spring-boot-starter-test 下时,它被 spring-boot-starter-web 拉入编译范围。
我的猜测是spring-boot-starter-test拉取了spring-core的更高版本,这就是为什么它出现在树中的原因
评论
mvn dependency:tree