2011-05-18 97 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