2011-05-18 99 views

回答

2

Runtime.exec()你可以從你的Java代碼

這包括javac編譯器和Java作爲一個單獨的進程

+0

當運行MyCompilingUtility.java,它調用'javac MyFile.java'的參數調用'Runtime#exec()',其中'MyFile.java'是通過'MyCompilingUtility.java'通過'PrintWriter'創建的,我不會沒有看到爲'MyFile.java'生成的'class'文件。爲什麼? – 2014-02-05 15:08:19

+1

檢查javac的錯誤輸出,javac期望工作目錄是它正在編譯的類的根包 – 2014-02-05 16:37:22

+0

謝謝@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

5

您可以使用JavaCompiler一個實例上運行的任何命令行應用程序:

JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); 

請按照鏈接瞭解如何使用它的示例。

+1

請注意,你將需要一個JDK爲此工作。 JRE安裝不包含編譯器。 – 2011-05-18 23:26:08

+0

好點的Thorbjørn。如果他選擇這種替代方案,他的申請的最低要求將是** JDK 6 **。 – iruediger 2011-05-18 23:35:06

+0

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