如何用不同Group ID的构件替换SBT插件的依赖?
解决方法
因为你要替换的依赖Group ID完全不同,没法直接用sbt的dependencyOverrides(这个仅针对同Group ID+Artifact ID的依赖做版本覆盖),得用「排除原漏洞依赖+手动引入修复版构件」的组合方案:
步骤1:排除插件自带的漏洞依赖
修改project/plugins.sbt里的插件声明,添加exclude规则把有问题的依赖排除掉:
addSbtPlugin("com.fake.something" % "myplugin" % "0.1.2") exclude ("org.some.framework", "framework-core")
步骤2:引入修复后的构件
在project/build.sbt(如果没有这个文件就新建一个)里添加修复版依赖——sbt插件运行在「构建项目」(即你项目中project目录对应的sbt项目)中,所以需要在这里声明:
libraryDependencies += "com.fixed.framework" % "framework-core" % "4.5.6"
验证替换是否生效
在项目根目录打开sbt控制台,执行以下命令检查依赖树:
sbt > project plugins > dependencyTree
确认输出中已不存在org.some.framework:framework-core:1.2.3,取而代之的是com.fixed.framework:framework-core:4.5.6即可。
只要修复版构件的API和原依赖兼容,且插件本身没有硬编码依赖的Group ID,这种替换就能正常工作。
内容的提问来源于stack exchange,提问作者Scott Turnquist
相关产品推荐
相关产品推荐

