Scala SBT:你能将同一依赖项的两个不同版本导入到一个构建文件中吗?



我需要升级一个库,新版本中有很大的重大变化。如果我可以使用 sbt 以某种方式将两个版本一起导入,并且让较新的版本类覆盖旧版本类(如果存在(,我正在徘徊。我认为这将允许我优雅地进行升级,而不会出现编译错误,直到我可以完全摆脱旧版本。

这可能吗?到目前为止,我找不到任何说这是可能的,所以如果不是,是否有比用新版本替换旧版本并一一解决所有这些错误更好的方法进行迁移?

使用光滑库的示例(导致未解析的依赖项错误(

libraryDependencies ++= Seq(
"com.typesafe.slick" %% "slick" % "2.1.0",
"com.typesafe.slick" %% "slick" % "3.0.0"
)

我将不胜感激任何提示或指示。谢谢!

让较新版本的类覆盖较旧的版本类(如果存在(

我相信这是不可能的。

你遇到的通常被称为"JAR地狱"。我知道解决它的唯一方法是使用阴影的 depenedencies(请参阅 https://github.com/sbt/sbt-assembly#shading 的一个例子(,但这会导致其他问题。

最干净的解决方案(不幸的是也是最多的工作(是咬紧牙关,一次解决所有问题。

AFAIK 这是不可能的,因为类路径中只能有一个版本的依赖项。即使有办法强制使用,导入时也无法区分所需的版本。

可能值得研究OSGi,因为Java/Maven/etc由于JVM类加载器的工作方式而遭受相同的问题。

根据您使用的库子集的复杂程度,可以围绕光滑对象编写一个包装器,该包装器的接口类似于 2.1.0(仅适用于实际使用的东西(,但按照 3.0.0 实现。不过,这可能既不平凡又耗时。

最新更新