Две библиотеки содержат разные версии одной и той же зависимости. Как импортировать их обоих?

У меня следующая ситуация:

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

Теперь я получаю VerifyError, потому что TreatsLibrary использует IceCream.giveToKidAfterDrill(), который был удален в версии 2.0 из-за юридических причин.

Как импортировать обе версии и убедиться, что каждый из них использует свой собственный?

Ответ 1

Этот ответ предполагает, что вы говорите о том, как загружать эти библиотеки из упакованного uber JAR во время выполнения.

Вам нужно затенять ваши зависимости с помощью sbt-assembly. Это можно сделать следующим образом:

assemblyShadeRules in assembly ++= Seq(
  ShadeRule.rename("IceCream.**" -> "[email protected]")
    .inLibrary("com.library.treats" % "TreatsLibrary" % "1.0.0")
    .inProject
)

Это затеняет зависимость IceCream в вашем com.library.treats и изменит имя каждого пакета, начиная с my_icecream.