为 DynamicClassLoader 中的 classes 获取(或写入)class 文件

Get (or write) class files for the classes in the DynamicClassLoader

有什么方法可以 find/write class 文件 DynamicClassLoader 中的 class 文件吗?

  (let [f #(+ 1 %)
        cls (class f)
        cl (.getClassLoader cls)]
    
    (println (.getName cls)) ; => my.project.namespace$eval123$f__4321

    ;; Do something here to get a path to a class file
    ;; .../my/project/namespace/eval123$f__4321.class

    )

那些 class 永远不会被写入,并且没有机制可以从 Class 对象中发现会产生 class 的一系列字节。据我所知,您能做的最好的事情就是使用 JVM 检测工具在编译时记录 class 的字节。我不是这方面的专家,但 no-disassemble 以某种方式做到了;您可以使用它,也可以使用类似的方法自己完成。

浏览 Clojure 源代码后,我发现了一个完全符合我要求的编译器变量。我不知道我是否会推荐这种方法,但到目前为止它对我来说效果很好。

(.bindRoot Compiler/COMPILE_FILES true)

这会将 .class 个文件写入 *compile-path* 下的路径。