簡體   English   中英

以編程方式編譯和加載Clojure中的Java源文件

[英]programmatically compiling and loading java source files in clojure

在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 我錯過了什么?

我通過動態加載庫解決了這個問題

Vinyasa

這是關於它的博客文章: emacs / nrepl中Java代碼的動態重載

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM