Clojure 与同一库的不同主要版本的相互依赖性问题

Issues with Clojure inter-dependency with different major versions of the same library

披露:我不是 Java 开发人员,我对 Maven 知之甚少。

我遇到了 Clojure/Lein 的问题。我正在开发一个使用两个不相关的外部 libraries/projects 的项目。两者都使用 Sesame RDF 库。其中之一是 Any23,它使用 Sesame 2.x,而另一个使用版本 4.x。问题是 Any23 不适用于 Sesame 4.x,而另一个库不适用于 Sesame 2.x.

这意味着 :exclusions 我的 project.clj 文件中的一个或另一个将不起作用。

是否存在解决此类依赖性问题的解决方案,或者我卡住了?

这个问题没有任何简单的答案。以下是一些选项:

  • 升级 Any23 以使用 Sesame 4.x
  • 使用 Maven Shade 之类的东西来重命名其中一个 Sesame 包,这样它们就可以加载到同一个类路径中。如果您尝试在两个库之间使用或共享对象,您可能 运行 会遇到麻烦。
  • 使用Clojure OSGI隔离包。 (这可能是最困难的选项,尽管也是最 'correct')。

有关详细信息,请参阅 Java, Classpath, Classloading => Multiple Versions of the same jar/project and Wikipedia's entry on JAR Hell