_评论者:jeroen_
我已经尽量使例子尽可能简单。您是对的,ClassCastException的准确性是完美的,但您只有在确定这涉及到*compile-path*之后才会意识到这一点。这个bug报告主要关于管理期望(Clojure用户的期望)。
clj -A:new app example.error
cd example.error
clj
;; clj 已将 *compile-path* 设置为字符串(尽管不在classpath中)
*compile-path* ;=> "classes"
(let [f (clojure.java.io/file "classes/foo.clj")]
(clojure.java.io/make-parents f)
(spit f "(ns foo) (gen-class :name my.new.Class)")
(compile 'foo)
(clojure.java.shell/sh "ls" "classes"))
; 成功,尽管您仍然无法加载类
; #=> {:exit 0, :out "clojure\nfoo$fn__134.class\nfoo$fn__166.class\nfoo$fn__174.class\nfoo$loading__6549__auto____132.class\nfoo$loading__6549__auto____164.class\nfoo$loading__6549__auto____172.class\nfoo.clj\nfoo__init.class\n", :err ""}
;; 从Boot项目
;; boot.user=> *compile-path*
;; #object[java.io.File 0x5266b1a "/var/folders/ck/9zqvs0zx5vsf2bc7rvv1pwc40000gn/T/boot-repl8170014881711480931"]
;; 这可以在clj repl中重现
(binding [*compile-path* (clojure.java.io/file "classes")]
(compile 'foo)
)
Syntax error compiling fn* at (foo.clj:1:1).
Cause: java.io.File cannot be cast to java.lang.String