我有一個場景,當我的應用程序運行時必須生成Java代碼。在運行時生成,編譯和使用Java代碼?
可以從我的應用程序(作爲單獨的應用程序)編譯和運行代碼。
是否有可能從同一個應用程序編譯並使用它。不能使用ProcessBuilder想到的任何可能性
我有一個場景,當我的應用程序運行時必須生成Java代碼。在運行時生成,編譯和使用Java代碼?
可以從我的應用程序(作爲單獨的應用程序)編譯和運行代碼。
是否有可能從同一個應用程序編譯並使用它。不能使用ProcessBuilder想到的任何可能性
或Runtime.exec()你可以從你的Java代碼
這包括javac編譯器和Java作爲一個單獨的進程
您可以使用JavaCompiler一個實例上運行的任何命令行應用程序:
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
請按照鏈接瞭解如何使用它的示例。
請注意,你將需要一個JDK爲此工作。 JRE安裝不包含編譯器。 – 2011-05-18 23:26:08
好點的Thorbjørn。如果他選擇這種替代方案,他的申請的最低要求將是** JDK 6 **。 – iruediger 2011-05-18 23:35:06
JRE 7似乎已將javax.tools.ToolProvider放在rt.jar中。雖然我沒有測試過,但是我在'jdk1.7.0_05/jre/lib/rt.jar'中看到: 'javax/tools/JavaCompiler.class'和'javax/tools/ToolProvider.class' – karmakaze 2012-07-20 02:18:00
結賬Create dynamic applications with javax.tools。 第二次我今天引用了這個 - 我發誓我不爲他們工作。
當運行MyCompilingUtility.java,它調用'javac MyFile.java'的參數調用'Runtime#exec()',其中'MyFile.java'是通過'MyCompilingUtility.java'通過'PrintWriter'創建的,我不會沒有看到爲'MyFile.java'生成的'class'文件。爲什麼? – 2014-02-05 15:08:19
檢查javac的錯誤輸出,javac期望工作目錄是它正在編譯的類的根包 – 2014-02-05 16:37:22
謝謝@ratchet怪胎。發佈Sotirios Delimanolis的評論來闡述你的有用建議 - http://stackoverflow.com/questions/21580975/using-runtimeexec-with-javac-no-class-file/21581168?noredirect=1#comment32600305_21581168 – 2014-02-05 16:57:59