为什么SBT在使用excludes时不排除这些库?

为什么SBT在使用excludes时不排除这些库?,sbt,Sbt,尽管做了以下工作,但sbt仍在抓取提升json。为什么? "net.liftweb" %% "lift-mapper" % "2.6-M4" % "compile" excludeAll(ExclusionRule("net.liftweb", "lift-json")) 更多信息。这是依赖关系树显示的内容: +-net.liftweb:lift-mapper_2.10:2.6-M4 [info] | +-net.liftweb:lift-db_2.10:2.6-M4 [info] |

尽管做了以下工作,但sbt仍在抓取提升json。为什么?

"net.liftweb" %% "lift-mapper" % "2.6-M4" % "compile" excludeAll(ExclusionRule("net.liftweb", "lift-json"))
更多信息。这是依赖关系树显示的内容:

+-net.liftweb:lift-mapper_2.10:2.6-M4
[info]   | +-net.liftweb:lift-db_2.10:2.6-M4
[info]   | | +-net.liftweb:lift-util_2.10:2.6-M4
[info]   | | | | 
…
[info]   | | | |   
[info]   | | | +-net.liftweb:lift-json_2.10:2.6-M4

所以依赖关系是lift-mapper->lift-db->lift-util->lift-json,也许排除不深?

也许还有其他库依赖于它。您可以使用插件找到这些库。或者干脆将其从所有依赖项中排除:

libraryDependencies ++= Seq(
  ......
).map(_.excludeAll(ExclusionRule("net.liftweb", "lift-json")))

这里不明显的关键是,sbt中的排除实际上只是底层常春藤引擎的传递规则。由于Ivy对sbt约定一无所知(例如,将
\u 2.10
附加到特定于Scala版本的依赖项中),因此您需要告诉它真正应该排除什么。在本例中,这意味着该行应如下所示:

"net.liftweb" %% "lift-mapper" % "2.6-M4" % "compile" excludeAll(ExclusionRule("net.liftweb", "lift-json_2.10"))

也许可以对sbt进行一些增强,使其能够看到,由于您定义的依赖关系是特定于Scala版本的,它还应该尝试为该版本添加排除规则。

我使用依赖关系图进行检查,lift json的唯一来源是lift-mapper。如果从libraryDependencies中排除不起作用,请尝试对allDependenciesThanks使用相同的方法。这是修复可传递依赖关系问题所必需的!赞成。我也遇到过这种情况。请您或@ChanningWalton为它打开一个Github发行版好吗?不需要硬编码就可以排除scala依赖关系它的scala版本:excludeAll(ExcludeRule(“net.liftweb”,“lift json”)。带有CrossVersion(CrossVersion.binary))