2015-09-11 86 views
1

阿帕奇風暴依賴我嘗試使用Apache風暴和Redis的在我的Clojure項目。我project.clj看起來是這樣的:正確導入Clojure中

(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 "0.9.0.1"] ; Last available version on Clojars 

然後一切工作正常。我究竟做錯了什麼?

回答

0

我想我已經找到了解決辦法。運行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未能初始化本身(?)由於依賴低版本。這只是一個猜想,因爲我不知道如何調試這些庫初始化例程。

UPDATE:彼得Taoussanis,胭脂紅庫的作者,針對這一GitHub issue確認這是一個依賴問題,並建議修復類似問題的其他一些方法。謝謝彼得!