我正在努力在Grails 2.0.0(和2.1.0-SNAPSHOT)中扩展Grails Clojure插件,我想将它更新为Clojure 1.3.0并添加clojure.tools.logging.
Clojure的一个编译过程中抛出一个异常
代理一的ByteArrayOutputStream中clojure.tools.logging的日志流功能:
ClassCastException: clojure.asm.Type cannot be cast to clojure.lang.IFn
(https://gist.github.com/a6ae681c37091a3d2379)
我去和删除clojure.tools.logging,并写了一个剥离下来的代理的Object:
(proxy [java.lang.Object] [] (toString [] "proxy's toString"))
它也扔了同样的ClassCastException信息.
我试图打印macroexpand-1的的代理,得到了同样的事情.
我恢复到Clojure 1.2.0并且代理工作再次正常.
我尝试了1.4.0的许多版本,它们表现出与1.3.0相同的行为.1.2.1也引发了某种异常,但我试图达到1.3.0,所以我没有花太多时间.
堆栈跟踪指向"GEN-方法功能的一项所定义的设的形式generate-proxy中core_proxy.clj.
我println在那附近添加了一小部分,看看我能不能发现正在发生的事情.也许下一个陈述会背叛读者对我的巨大误解,但只是添加那些println改变了编译时行为的方式我完全没想到.异常位置和异常类型完全改变,即使所有Clojure测试mvn package继续通过.
例如,println在开始生成字节码之前,只需在gen-method中添加一个单元,就会导致Clojure抛出
ClassCastException: clojure.lang.PersistentArrayMap cannot be cast to …