Maven中同构件直接与间接依赖共存时的版本选择问题
Maven依赖版本冲突处理及漏洞扫描说明
核心结论
你的项目最终会采用直接声明的JUnit 4.13.1版本,漏洞扫描也只会针对这个生效版本进行检测,不会再处理被排除的4.11版本。
原因说明
Maven的依赖调解规则决定了版本优先级:
- 直接依赖 > 间接依赖:不管pom.xml中依赖的声明顺序,显式直接声明的依赖优先级远高于通过其他依赖传递过来的间接依赖。你直接在pom里指定了JUnit 4.13.1,所以它会覆盖
browserstack-local-java传递过来的4.11版本。 - 可以通过执行命令验证实际依赖树:
执行后会看到输出里JUnit的版本是4.13.1,而4.11会被标注为mvn dependency:tree(omitted for conflict with 4.13.1)。
漏洞扫描逻辑
漏洞扫描工具是基于Maven最终解析生成的依赖树来做检测的,只会对实际引入的生效依赖版本进行漏洞排查,被排除的间接依赖版本不会被纳入扫描范围。
内容的提问来源于stack exchange,提问作者sumit
相关产品推荐
相关产品推荐

