两个库引入了相同依赖项的不同版本。如何导入它们?

Two libraries bring in different version of the same dependency. How to import them both?

我有以下情况:

+ DentistApp
   L TreatsLibrary
     L IceCream 1.0
   L CavityCausesLib
     L IceCream 2.0

现在我得到一个 VerifyError,因为 TreatsLibrary 正在使用 IceCream.giveToKidAfterDrill(),由于法律原因,它在 2.0 版中被删除了。

如何导入两个版本并确保每个版本都使用自己的版本?

此答案假设您正在谈论如何在运行时从打包的超级 JAR 加载这些库。

您需要使用 sbt-assembly 隐藏您的依赖项。 这可以按如下方式完成:

assemblyShadeRules in assembly ++= Seq(
  ShadeRule.rename("IceCream.**" -> "my_icecream.@1")
    .inLibrary("com.library.treats" % "TreatsLibrary" % "1.0.0")
    .inProject
)

这将隐藏 com.library.treats 中的 IceCream 依赖项,并将每个包名称更改为以 my_icecream 开头。