Clojure Как находить и управлять конфликтами зависимостей. - PullRequest
0 голосов
/ 21 сентября 2018

Недавно я столкнулся с проблемой, когда включение новой зависимости в мой проект нарушило функциональность другой, не связанной.

Два вопроса:

[amazonica "0.3.132"]
[abengoa/clj-stripe "1.0.4"]

Включение вышеприведенной полосы нарушает работу амазонки и выдает следующую ошибку для операций s3

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

, которая была исправлена ​​с помощью

[clj-facebook-graph "0.4.0" :exclusions [clj-http]]

Но я хотел бы знать, как я смогучтобы выяснить, что в библиотеке Stripe вызывает проблему, и как я могу войти и исправить ее, не ломая библиотеку.Меня также интересуют более общие идеи о том, как это сделать, поэтому, если я столкнусь с этим снова, я смогу решить проблему.

Ответы [ 2 ]

0 голосов
/ 21 сентября 2018

Как и в случае с такими проблемами, настоящей серебряной пули не существует.Лучшее начало для обнаружения проблем в проекте leiningen - это запуск задачи deps.Например:

lein deps :tree

Что, например, в случайном проекте приводит к следующему:

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]]

Это подсказки для начала.После этого начального блока вы увидите все дерево переходных процессов.Например:

[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"]

И оттуда вы можете попытаться выяснить подробнее.

0 голосов
/ 21 сентября 2018

Если вы используете Leiningen, вы можете использовать lein deps :tree для печати полезной отладочной информации, и перед печатью дерева зависимостей он напечатает предложенные исключения, чтобы избежать следующих типов проблем:

$ 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 SDK, Джексоном и т. Д.

...