我有一个包含几个实用程序类的项目。让我们命名它Utils
。我有一个proj1
取决于Utils
. 另一个proj2
取决于proj1
and Utils
。
问题是如果两者都proj1
依赖proj2
于不同的Utils
版本,这将导致问题。
最好的解决方案是什么?
这种情况发生在 Scala/SBT 项目中,但我猜其他语言也有同样的问题。
编辑:
需要明确的
proj2
是,将运行的项目将使用来自proj1
和的一些代码Utils
。
我有一个包含几个实用程序类的项目。让我们命名它Utils
。我有一个proj1
取决于Utils
. 另一个proj2
取决于proj1
and Utils
。
问题是如果两者都proj1
依赖proj2
于不同的Utils
版本,这将导致问题。
最好的解决方案是什么?
这种情况发生在 Scala/SBT 项目中,但我猜其他语言也有同样的问题。
编辑:
需要明确的
proj2
是,将运行的项目将使用来自proj1
和的一些代码Utils
。
这是经典的Jar Hell,在任何基于 JVM 的项目上都是一个问题,而不仅仅是带有 sbt 的 scala。
有4种常见的解决方案
通过更改代码摆脱冲突,将您的多个版本依赖项合并为一个依赖项。
阴影(如上所述@Sean Viera)
多个 ClassLoader 组件架构,如 OSGI(如 @tuxdna 所述)
像微服务架构一样在单独的 JVM 中运行(@tuxdna 也提到过)
你有三个不同的项目:
100%
确保 proj1 和 proj2 之间没有冲突的唯一方法是单独运行它们。
一旦你将 proj1 和 proj2 与不同版本的 Utils 混合在同一个类路径上,你最终将覆盖一个或另一个项目。
您可以使用以下方法实现隔离: