在clojure中正确导入apache storm依赖项

yrdbyhpb  于 2021-06-21  发布在  Storm
关注(0)|答案(1)|浏览(428)

我尝试在我的clojure项目中使用apachestorm和redis。我的 project.clj 看起来像这样:

(defproject storm "0.1.0-SNAPSHOT"
  :description "FIXME: write description"
  :url "http://example.com/FIXME"
  :license {:name "Eclipse Public License"
            :url "http://www.eclipse.org/legal/epl-v10.html"}
  :dependencies [[org.clojure/clojure "1.7.0"]
                 [org.apache.storm/storm-core "0.9.5"]
                 [com.taoensso/carmine "2.11.1"] ])

redis connector模块中的命名空间声明为:

(ns storm.redis
  (:require [taoensso.carmine :as car]))

现在,出于某种原因,如果我尝试计算上述命名空间声明,会得到一个奇怪的错误:

CompilerException java.lang.Exception: namespace 'taoensso.carmine' not found, compiling:(storm/redis.clj:1:22)

如果我在 project.clj

[storm "0.9.0.1"] ; Last available version on Clojars

然后一切正常。我做错什么了?

jw5wzhpr

jw5wzhpr1#

我想我找到了解决办法。跑步 lein deps :tree 给我这个:

Possibly confusing dependencies found:
[org.apache.storm/storm-core "0.9.5"] -> [commons-codec "1.6"]
 overrides
[com.taoensso/carmine "2.11.1"] -> [commons-codec "1.10"]

Consider using these exclusions:
[com.taoensso/carmine "2.11.1" :exclusions [commons-codec]]

排除 commons-codeccarmine 仍然会产生相同的错误,但反之亦然,并从 storm 工作:

[org.apache.storm/storm-core "0.9.5" :exclusions [commons-codec]]

所以这意味着两个库都将使用 commons-codec .
似乎 carmine 由于依赖项的版本较低,无法初始化自身(?)。这只是猜测,因为我不知道如何调试那些库初始化例程。
更新:carmine library的作者petertaoussanis在回答github的问题时确认了这是一个依赖性问题,并提出了一些解决类似问题的其他方法。谢谢彼得!

相关问题