0

在关于 SO 的这个问题之后,我遇到了一些问题:如何以编程方式编译和实例化 Java 类?

以下是我的clojure翻译:

(ns compile-and-load.core
  (:import [javax.tools JavaCompiler ToolProvider]
           [java.net URL URLClassLoader]))

(def src
  (str "package test;\n"
       "public class Test {\n"
       "  static { System.out.println(\"hello\");}\n"
       "  public Test() { System.out.println(\"world\");}}"))

(defn tmp-dir []
  (clojure.java.io/file (System/getProperty "java.io.tmpdir")))

(def tmp (tmp-dir))

(spit (str (.getAbsolutePath tmp) "/Test.java") src)


(.run (ToolProvider/getSystemJavaCompiler)
      nil nil nil
      (let [arr (make-array String 1)]
        (aset arr 0 (str (.getAbsolutePath tmp) "/Test.java"))
        arr))


(def cl (URLClassLoader.
         (let [arr (make-array URL 1)]
           (aset arr 0 (.toURL (.toURI tmp)))
           arr)))

(.loadClass cl "test.Test")

一切都很好,直到最后一行。有一个已编译的 Test.class,如果我将文件复制到 target/classes/test 文件夹中,我可以加载它。但是在最后一行,我得到一个ClassNotFoundException. 我错过了什么?

4

1 回答 1

0

我用动态加载库解决了这个问题

串联体式

这是一篇关于它的博客文章:在 emacs/nrepl 中动态重新加载 java 代码

于 2014-01-03T03:24:10.763 回答