Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
指定当其他库在clojure中使用不同版本时要使用的库版本_Clojure_Dependencies_Libraries - Fatal编程技术网

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

指定当其他库在clojure中使用不同版本时要使用的库版本,clojure,dependencies,libraries,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"] ] 我有没有办法指定在新库中使用旧库的版

现在我正在从事一个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"]
]
我有没有办法指定在新库中使用旧库的版本,而不是指定所有不使用旧库的位置?因此,与其说到处排除,不如指定使用新库的旧库版本。类似于

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

Leiningen有一个全局
:excludes
键,您可以使用它从所有依赖项中排除,并自己提供依赖项


另一个选项是使用
:托管依赖项
。它将允许您为leiningen在多个位置遇到的依赖项指定“回退”版本。将这些依赖项移动到
:托管依赖项
块,然后在
:依赖项
块中再次指定它们,但不指定版本

:托管依赖项[
[旧库“所需版本”]]
:依赖项[
[旧图书馆]
[我的图书馆“2.1.1”]
[他们的图书馆“2.1.3”]
[新图书馆“0.0.1”]]

这一页很好地解释了这个概念

当你说自己提供依赖时,你是什么意思?因为我刚刚注意到在我的依赖关系树中,显式地将[old lib]放置在my:dependencies向量中时:excludes仍然将其从自身中排除。全局
:excludes
键只是将向量添加到每个依赖关系中。您的
lein-deps:tree
应该显示
[old-lib:excludes[old-lib]]
,这意味着在获取
旧库的依赖项时,将跳过对
旧库的任何依赖项。检查您的
lein类路径
,查看
旧库
实际上在您的类路径上。
:dependencies[
  [my-library "2.1.1"]
  [their-library "2.1.3"]
  [new-lib "0.0.1"]
]
:exclusions [old-lib]