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。
披露:我不是 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。