动态Java编译:BeanShell,Janino,JavaCompiler?

时间:2009-12-25 16:49:42

标签: java compilation dynamic-compilation janino

我即将开始开发一个小型Java桌面应用程序。该应用程序只是一个引擎,用户可以使用Java类来完成工作(将输入转换为输出)。

我希望用户提供实际的Java类作为可以即时加载(和重新加载)的文件。

对于这种特殊用途,是否有任何理由说Java会比Groovy或Beanshell更麻烦?我不是要求Groovy / Beanshell和Java的比较,因为有很多。相反,我想知道与Java相比,从文件动态加载Groovy或Beanshell类更容易。

对于Java 1.6,JavaCompiler是动态加载代码的最佳方式吗?我想使用所有语言功能,所以我认为Janino已经出局了。还有,重装的任何问题?

注意:我看过thisthis ,但我不确定他们是否回答了我的问题。

1 个答案:

答案 0 :(得分:3)

JavaCompiler非常通用,但它需要一个轻微的潜在配置问题:在javax.tools中,ToolProvider.getSystemJavaCompiler()将编译器的类标识为com.sun.tools.javac.api.JavacTool。在某些平台上,该类不属于JRE; JDK似乎是必需的。这是一个example

还要考虑javax.script,讨论here。支持多个scripting engines