首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何查找和管理依赖冲突。

如何查找和管理依赖冲突。
EN

Stack Overflow用户
提问于 2018-09-21 10:53:19
回答 2查看 1.1K关注 0票数 2

最近我遇到了一个问题,在我的项目中包含一个新的依赖项破坏了另一个无关的依赖项的功能。

这两个问题:

代码语言:javascript
复制
[amazonica "0.3.132"]
[abengoa/clj-stripe "1.0.4"]

包括上面的条带,会破坏amazon,并为s3操作抛出以下错误

代码语言:javascript
复制
ERROR org/apache/http/conn/SchemePortResolver
java.lang.NoClassDefFoundError: org/apache/http/conn/SchemePortResolver
    at com.amazonaws.http.apache.client.impl.ApacheHttpClientFactory.<init>(ApacheHttpClientFactory.java:41)

删除条形库修复了Amazon,所以我开始怀疑那里有某种冲突。我的问题是,我如何找出问题的原因,并解决它。

我在回购上发现了一个类似的问题:https://github.com/mcohen01/amazonica/issues/294

它是用

代码语言:javascript
复制
[clj-facebook-graph "0.4.0" :exclusions [clj-http]]

但我想知道如何才能找到引起问题的Stripe库中的内容,以及如何在不破坏库的情况下修复它。我还对如何做到这一点有更多的一般性想法感兴趣,所以如果我再次遇到它,我可以解决这个问题。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-09-21 11:00:53

如果使用Leiningen,可以使用lein deps :tree打印有用的调试信息,在打印依赖树之前,它将打印建议的排除,以避免这些类型的问题:

代码语言:javascript
复制
$ lein deps :tree
...
[com.taoensso/faraday "1.9.0"] -> [com.taoensso/encore "2.67.2"] -> [com.taoensso/truss "1.3.3"]
overrides
[amazonica "0.3.112" :exclusions [com.amazonaws/amazon-kinesis-client com.amazonaws/aws-java-sdk com.amazonaws/dynamodb-streams-kinesis-adapter]] -> [com.taoensso/nippy "2.12.2"] -> [com.taoensso/encore "2.68.0"] -> [com.taoensso/truss "1.3.4"]

Consider using these exclusions:
[amazonica "0.3.112" :exclusions [com.amazonaws/amazon-kinesis-client com.taoensso/truss com.amazonaws/dynamodb-streams-kinesis-adapter com.amazonaws/aws-java-sdk]]
...

根据我的经验,在排除精确的及物冲突方面仍有一些尝试和错误。我在AWS、Jackson等方面也有类似的问题。

票数 1
EN

Stack Overflow用户

发布于 2018-09-21 11:01:18

就像这样的问题,没有真正的灵丹妙药。在leiningen项目中发现问题的最佳开端是运行deps任务。例如:

代码语言:javascript
复制
lein deps :tree

例如,在一个随机项目中,其结果如下:

代码语言:javascript
复制
Possibly confusing dependencies found:
[org.clojure/clojurescript "1.9.293"] -> [org.clojure/tools.reader "1.0.0-beta3"]
 overrides
[cljfmt "0.6.0" :exclusions [org.clojure/clojure]] -> [rewrite-cljs "0.4.4"] -> [org.clojure/tools.reader "1.0.5"]
 and
[cljfmt "0.6.0" :exclusions [org.clojure/clojure]] -> [org.clojure/tools.reader "1.2.2"]

Consider using these exclusions:
[cljfmt "0.6.0" :exclusions [org.clojure/clojure org.clojure/tools.reader]]

这些都是从暗示开始的。在这个初始块之后,您将看到整个传递点树。例如:

代码语言:javascript
复制
[cljfmt "0.6.0" :exclusions [[org.clojure/clojure]]]
  [com.googlecode.java-diff-utils/diffutils "1.3.0"]
  [org.clojure/tools.cli "0.3.7"]
  [rewrite-clj "0.6.0"]
  [rewrite-cljs "0.4.4"]

你可以试着从那里调查更多。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52442170

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档