_评论者:jeroen_
我已经尝试让示例尽可能简单。您是对的,ClassCastException 是完全准确的,但您是在明白了这是关于 *compile-path* 之后才意识到这一点的。这个错误报告主要关于管理对 clojure 用户的预期。
clj -A:new app example.error
cd example.error
clj
;; clj 已正确设置 *compile-path* 为字符串(尽管不在类路径中)
*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)
)
语法错误编译 fn* 在 (foo.clj:1:1)。
原因:无法将 java.io.File 转换为 java.lang.String