5

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

问题是如果两者都proj1依赖proj2于不同的Utils版本,这将导致问题。

最好的解决方案是什么?

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

编辑:

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

4

2 回答 2

3

这是经典的Jar Hell,在任何基于 JVM 的项目上都是一个问题,而不仅仅是带有 sbt 的 scala。

有4种常见的解决方案

  1. 通过更改代码摆脱冲突,将您的多个版本依赖项合并为一个依赖项。

  2. 阴影(如上所述@Sean Viera)

  3. 多个 ClassLoader 组件架构,如 OSGI(如 @tuxdna 所述)

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

于 2015-11-23T22:19:27.583 回答
1

你有三个不同的项目:

  • 实用程序
  • proj1 <- 取决于 Utils v1
  • proj2 <- 取决于 Utils v2

100%确保 proj1 和 proj2 之间没有冲突的唯一方法是单独运行它们。

一旦你将 proj1 和 proj2 与不同版本的 Utils 混合在同一个类路径上,你最终将覆盖一个或另一个项目。

您可以使用以下方法实现隔离:

  • 使用适当版本的 Utils 在单独的 JVM 中运行它们
  • 在同一个 JVM 但在不同的类加载器中运行它们
于 2015-11-23T21:01:34.883 回答