我有一个场景,当我的应用程序运行时必须生成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