定义新的宏" defn",lein uberjar成功,lein run无法编译

时间:2015-11-11 11:04:13

标签: clojure leiningen

我在命名空间mwm中定义了我自己的defn。

我的新代码看起来像这样

(mwm/defn foo [x] ...)

只要它被称为defn2,一切都很好,但是在使用clojure.core / defn将其重命名为defn并引用原始defn之后,只有" lein uberjar"的工作原理。

当我运行" lein run"时,编译失败为

c:\data3\clojure\cdn77-purge>lein run
WARNING: defn already refers to: #'clojure.core/defn in namespace: mw.mwm, being
 replaced by: #'mw.mwm/defn
Exception in thread "main" java.lang.ClassNotFoundException: mw.mw1, compiling:(
mw/mw1.clj:40:1)
        at clojure.lang.Compiler.analyze(Compiler.java:6543)
        at clojure.lang.Compiler.analyze(Compiler.java:6485)
        at clojure.lang.Compiler$InvokeExpr.parse(Compiler.java:3791)
        at clojure.lang.Compiler.analyzeSeq(Compiler.java:6725)

可以在https://github.com/mattiasw2/cdn77-purge/tree/renamed_to_defn

找到该代码

2 个答案:

答案 0 :(得分:1)

您可以尝试在mw.mwm命名空间中使用:refer-clojure子句:

(ns mw.mwm
  (:refer-clojure :exclude [defn])
  (:require
    [clojure.pprint :as pp]
    [clojure.walk :as walk])
  (:gen-class))

答案 1 :(得分:0)

我将自己定义的defn移动到一个单独的项目中,所以看起来你不能在使用它的同一个项目中重新定义defn。