在 Clojure 中正确导入 Apache Storm 依赖项
Properly importing Apache Storm dependencies in Clojure
我正在尝试在我的 Clojure 项目中使用 Apache Storm 和 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 连接器模块中的命名空间声明为:
(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 依赖项修改为
[storm "0.9.0.1"] ; Last available version on Clojars
然后一切正常。我做错了什么?
我想我找到了解决办法。 运行 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]]
从 carmine
中排除 commons-codec
仍然产生相同的错误,但反之亦然,从 storm
中排除有效:
[org.apache.storm/storm-core "0.9.5" :exclusions [commons-codec]]
所以这意味着两个库都将使用更新版本的 commons-codec
。
似乎 carmine
由于依赖项的版本较低而未能自行初始化 (?)。这只是一个猜想,因为我不知道如何调试那些库初始化例程。
更新: Carmine 库的作者 Peter Taoussanis 对此做出回应 GitHub issue 确认这是一个依赖性问题,并建议了一些其他修复类似问题的方法问题。谢谢彼得!
我正在尝试在我的 Clojure 项目中使用 Apache Storm 和 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 连接器模块中的命名空间声明为:
(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 依赖项修改为
[storm "0.9.0.1"] ; Last available version on Clojars
然后一切正常。我做错了什么?
我想我找到了解决办法。 运行 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]]
从 carmine
中排除 commons-codec
仍然产生相同的错误,但反之亦然,从 storm
中排除有效:
[org.apache.storm/storm-core "0.9.5" :exclusions [commons-codec]]
所以这意味着两个库都将使用更新版本的 commons-codec
。
似乎 carmine
由于依赖项的版本较低而未能自行初始化 (?)。这只是一个猜想,因为我不知道如何调试那些库初始化例程。
更新: Carmine 库的作者 Peter Taoussanis 对此做出回应 GitHub issue 确认这是一个依赖性问题,并建议了一些其他修复类似问题的方法问题。谢谢彼得!