指定其他库在clojure中使用不同版本时要使用的库版本

时间:2015-04-06 17:29:04

标签: clojure dependencies libraries

现在我正在开发一个clojure项目,其中包含已在内部编写的其他代码。通过所有这些代码,我们的一个库已经实现了几次,我知道在我的project.clj文件中,我可以指定不用像

这样的库来引入它
:dependencies[
    [my-library "2.1.1" :exclusions [old-lib]]
    [their-library "2.1.3" :exclusions [old-lib]]
    [new-library "0.0.1"]
]

我是否可以指定在新库中使用旧库的版本,而不是指定所有不使用它的地方?因此,不要说排除任何地方,只需指定使用new-library的old-lib版本。有点像...

:dependencies[
    [my-library "2.1.1"]
    [their-library "2.1.3"]
    [new-library "0.0.1" :use-this-lib [old-lib]]
]

2 个答案:

答案 0 :(得分:1)

Leiningen有一个全局:exclusions密钥,您可以使用该密钥从所有依赖项中排除并自行提供依赖项。

https://github.com/technomancy/leiningen/blob/ee57b19a5daae0687f22c7aba0da55538366664f/sample.project.clj#L63-L66

:dependencies[
  [my-library "2.1.1"]
  [their-library "2.1.3"]
  [new-lib "0.0.1"]
]
:exclusions [old-lib]

答案 1 :(得分:0)

另一种选择是使用 :managed-dependecies。它将让您为 leiningen 在多个地方遇到的依赖项指定“回退”版本。将此类依赖项移至 :managed-dependencies 块,然后在没有版本的 :dependencies 块中再次指定它们。

:managed-dependencies [
  [old-lib "DESIRED-VERSION"]]

:dependencies[
  [old-lib]
  [my-library "2.1.1"]
  [their-library "2.1.3"]
  [new-library "0.0.1"]]

这个页面很好地解释了这个概念。 https://cljdoc.org/d/leiningen/leiningen/2.9.5/doc/managed-dependencies-with-leiningen