我能强迫lein忽略当前Clojure项目外部任何代码的依赖项吗?

我能强迫lein忽略当前Clojure项目外部任何代码的依赖项吗?,clojure,leiningen,Clojure,Leiningen,我正在调用一个更大的Java项目中的一些Clojure(1.8)代码,我无法完全控制它。最近向父级添加了一些代码,这些代码导致与HTTP客户端cljhttp冲突 在我的Clojure项目中,以下是lein deps:tree | grep http的输出: [clj-http "3.7.0"] [org.apache.httpcomponents/httpasyncclient "4.1.3" :exclusions [[org.clojure/clojure]]] [or

我正在调用一个更大的Java项目中的一些Clojure(1.8)代码,我无法完全控制它。最近向父级添加了一些代码,这些代码导致与HTTP客户端
cljhttp
冲突

在我的Clojure项目中,以下是
lein deps:tree | grep http
的输出:

[clj-http "3.7.0"]    
  [org.apache.httpcomponents/httpasyncclient "4.1.3" :exclusions [[org.clojure/clojure]]] 
    [org.apache.httpcomponents/httpcore-nio "4.4.6"]    
  [org.apache.httpcomponents/httpclient "4.5.3" :exclusions [[org.clojure/clojure]]]    
  [org.apache.httpcomponents/httpcore "4.4.6" :exclusions [[org.clojure/clojure]]]    
  [org.apache.httpcomponents/httpmime "4.5.3" :exclusions [[org.clojure/clojure]]]
为另一个项目运行
mvn dependency:tree | grep http
将返回以下内容(请注意,此项目也是父项目的子项目):


在lein(或其他)中,有没有一种方法可以忽略源自Clojure代码之外的冲突?

有必要仔细检查冲突并修复它们。有两种方法:

  • 除外条款: 从提供的每个上游依赖项中排除
    lein deps tree
    中报告的每个依赖项。当您需要确保不包含可传递依赖项时,这将为您提供完全的控制。但它可以。。。“有点麻烦”;-)

  • 托管依赖项: 您还可以在project.clj中添加一个
    托管依赖项
    部分,在该部分中,您可以指定将使用的库的确切版本,而不考虑其他可传递依赖项的解决方案。这是一种更直截了当的方法,我倾向于使用这种方法

来自项目的随机示例:

  :managed-dependencies [[http-kit "2.3.0"]
                         [org.clojure/clojure "1.9.0"]
                         [ring/ring-core "1.6.0"]
                         [ring/ring-jetty-adapter "1.6.0"]
                         ... lots more ...]

出什么事了?错误消息是什么?java.lang.Exception:应用程序脚本引发了一个异常:java.lang.NoSuchFieldError:实例BSF信息:获取第0行的维度数据column:columnNoThanks Arthur-我发现了一个黑客解决方法,它太具体了,不值得分享,所以在mo没有机会对此进行调查。Will:托管依赖关系可以防止同一依赖关系的其他版本与lein引入的版本之间发生冲突?是的,托管依赖关系是最后应用的,因为lein正在构建类路径。据我所知,它拥有最终发言权,除非您传递的是手动破坏类路径的JVM选项
  :managed-dependencies [[http-kit "2.3.0"]
                         [org.clojure/clojure "1.9.0"]
                         [ring/ring-core "1.6.0"]
                         [ring/ring-jetty-adapter "1.6.0"]
                         ... lots more ...]