Java:在运行时在jre上编译代码

时间:2014-12-04 21:27:15

标签: java compilation runtime javacompiler

我需要在运行时编译java中的一些代码。我查了this,看起来就是这样做的。到目前为止这么好,但我需要在每个平台上运行最终程序。如果系统只有j r e,我就会遇到麻烦。

现在我考虑将编译器作为java lib。但我也不确定将tools.jar从java jdk复制到我的项目中的解决方案。它是一种有效的方法,还是有其他解决方案或者我可以使用的lib?

我需要这个,因为我想将脚本翻译成java代码并执行它。

谢谢!

- 编辑 -

为什么我需要这个?

用户应该对我程序某些部分的行为产生影响。所以有一些像脚本语言。由于性能原因,我认为将其转换为java源代码然后转换为字节码并使用它是最好的解决方案。此脚本不会经常更改,只会在程序的主要部分运行之前更改。如果有更好的选择,我也很乐意了解它们。

如果有任何问题或需要更多有关细节的信息,请询问。

1 个答案:

答案 0 :(得分:0)

我能想到的最好的建议是Janino:http://docs.codehaus.org/display/JANINO/Home。不幸的是,编译器似乎还没有完全支持Java 5(根据主页所说的内容),所以你可能有问题需要解决。


我认为最好的办法是咬紧牙关,让JDK成为先决条件。安装JRE并不比JDK困难得多,并向人们解释他们不需要进行Java开发很容易。

还有其他方法可以避免这个问题:

  • 不是生成Java源代码,而是直接编译为字节码。 (不是我建议这样做......)

  • 将您的DSL编译为可以为其编写解释器的内部表单。


  

由于性能原因,我认为将其转换为java源代码然后转换为字节码并使用它是最好的解决方案。

这对我来说听起来像是“过早优化”。