Дефиниране на нов макрос defn, lein uberjar успешно, lein run не успява да се компилира

Дефинирах моя собствена defn в пространството от имена mwm.

Новият ми код изглежда така

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

Всичко беше наред, докато се наричаше defn2, но след преименуването му на defn и препращане към оригиналния defn с помощта на clojure.core/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


person mattias    schedule 11.11.2015    source източник


Отговори (2)


Можете да опитате да използвате клауза :refer-clojure във вашето пространство от имена mw.mwm:

(ns mw.mwm
  (:refer-clojure :exclude [defn])
  (:require
    [clojure.pprint :as pp]
    [clojure.walk :as walk])
  (:gen-class))
person coredump    schedule 11.11.2015
comment
Благодаря, но не се получи. По някакъв начин трябва да се уверя, че lein генерира класа mw.mwm, преди да компилира другите файлове. - person mattias; 12.11.2015

Преместих собствената си дефиниция на defn в отделен проект, така че изглежда не можете да предефинирате defn в рамките на същия проект, в който се използва.

person mattias    schedule 25.11.2015