2015-06-11 19 views
1

我已经创建了一个包含两个命名空间familja-moderne.core和familja-moderne.visualization.svg的项目。Slamhound无法重建我的ns形式

的src/familja_moderne/core.clj

(ns familja-moderne.core 
    (:require [clojure.set :as set]) 
    (:import (java.io ByteArrayInputStream))) 

(def try-out 
    [(set/map-invert 
    {:1 :2 
    :3 :4}) 
    (ByteArrayInputStream. (.getBytes "myBytes")) 
    (familja-moderne.visualization.svg/points heists)]) 

的src/familja_moderne /可视化/ svg.clj

(ns familja-moderne.visualization.svg 
    (:refer-clojure :exclude [max min])) 

(def some-map {:this :that 
       :foo :bar}) 

(def many-dependencies 
    {:something (ByteArrayInputStream. (.getBytes "something")) 
    :another-map (set/map-invert some-map)}) 

当我运行

lein slamhound code/familja-moderne/src/familja_moderne/visualization/svg.clj 

我得到

WARNING: ex-info already refers to: #'clojure.core/ex-info in namespace: slingshot.ex-info, being replaced by: #'slingshot.ex-info/ex-info 
WARNING: ex-data already refers to: #'clojure.core/ex-data in namespace: slingshot.ex-info, being replaced by: #'slingshot.ex-info/ex-data 

我不理解,但它的工作原理和我的NS形式重建为

(ns familja-moderne.visualization.svg 
    (:require [clojure.set :as set]) 
    (:import (java.io ByteArrayInputStream)) 
    (:refer-clojure :exclude [max min])) 

运行

lein slamhound code/familja-moderne/src/familja_moderne/core.clj 

失败,我得到了以下信息

WARNING: ex-info already refers to: #'clojure.core/ex-info in namespace: slingshot.ex-info, being replaced by: #'slingshot.ex-info/ex-info 
WARNING: ex-data already refers to: #'clojure.core/ex-data in namespace: slingshot.ex-info, being replaced by: #'slingshot.ex-info/ex-data 
Failed to reconstruct: #<File code/familja-moderne/src/familja_moderne/core.clj> 
java.lang.ClassNotFoundException: familja-moderne.visualization.svg, compiling:(NO_SOURCE_PATH:0:0) 

运行

lein slamhound code/familja-moderne/src/familja_moderne/ 

这是应该在重建两个命名空间的结果纳秒形式不同的东西

WARNING: ex-info already refers to: #'clojure.core/ex-info in namespace: slingshot.ex-info, being replaced by: #'slingshot.ex-info/ex-info 
WARNING: ex-data already refers to: #'clojure.core/ex-data in namespace: slingshot.ex-info, being replaced by: #'slingshot.ex-info/ex-data 
Failed to reconstruct: #<File code/familja-moderne/src/familja_moderne/core.clj> 
Couldn't resolve familja-moderne.visualization.svg, got as far as {:import #{java.io.ByteArrayInputStream}, :alias {clojure.set set}, :old {:load nil, :exclude {}, :xrefer #{}, :require #{}, :refer-all #{}, :verbose #{}, :rename {}, :alias {clojure.set set}, :reload #{}, :reload-all #{}, :gen-class nil, :import #{java.io.ByteArrayInputStream}, :refer {}}, :meta nil, :name familja-moderne.core} 

如果我删除从familja-moderne.core它的工作原理确定familja-moderne.visualization.svg任何引用。

回答

2

我有同样的问题,并打开PR到Slamhound修复:https://github.com/technomancy/slamhound/pull/87

您可以通过中的dotted-alias分支执行lein install来尝试。

我的理论是,这个问题发生是因为CLJ-1403的clojure错误,当Slamhound试图“重新生成”ns形式时会引发异常。

希望有帮助!