如何解决传递依赖版本冲突(scala/sbt)

ped*_*o91 5 dependencies scala maven sbt transitive-dependency

我有一个包含多个实用程序类的项目。让我们命名它Utils。我有一个proj1取决于Utils. 另一个proj2依赖于proj1Utils

问题是,如果这两个proj1proj2依赖于不同的Utils版本,这将导致一些问题。

最好的解决办法是什么?

这种情况出现在Scala/SBT项目中,但我猜其他语言也有同样的问题。

编辑:

需要明确的proj2是,将运行的项目使用来自proj1和 的一些代码Utils

Dav*_*ook 3

这是经典的Jar Hell,它是任何基于 JVM 的项目的问题,而不仅仅是 scala 和 sbt 的问题。

常见的解决方案有4种

  1. 通过更改代码消除冲突,将多个版本依赖项合并为单个依赖项。

  2. 阴影(如@Sean Viera 上面提到的)

  3. 多 ClassLoader 组件架构,如 OSGI(如 @tuxdna 提到的)

  4. 像微服务架构一样在单独的 JVM 中运行(@tuxdna 也提到过)