Java 5中的动态编译选项

7
除了 Janino 之外,是否还有其他选项可以进行 Java 代码的即时编译和执行?我知道 v6 有编译器 API,但我需要使用 v5 VM。实际上,我需要将包含完整 Java 类的字符串编译并加载到内存中。

你不感兴趣Janino是有原因的吗?你只是在寻找其他选项还是它引起了特定的问题? - MBCook
Janino很好,但我正在寻找更高级的语言功能,这些功能不受Janino支持。实际上,我们目前正在使用Janino。 - Ryan Emerle
3个回答

6
你需要的是类似于Janino(http://www.janino.net/)的东西。我们已经使用它好几年了。你提供标准代码,它为你生成相应的类,这样你就可以使用它们了。事实上,它有很多不同的模式,并支持1.5语法糖和自动装箱等特性。
如果你调用javac,不仅需要准备好处理它所做的任何事情,还需要将类放在正确的位置或创建另一个类加载器。
Janino非常容易使用,它应该完全符合你的需求。

+1 是因为你对解决方案非常热情,以至于错过了第一句话。 - Ryan Emerle

5

在程序中调用javac:

http://www.juixe.com/techknow/index.php/2006/12/12/invoke-javac-at-runtime/

   com.sun.tools.javac.Main javac = new com.sun.tools.javac.Main();
String[] options = new String[] { "-classpath", classpath, "-d", outputDir, filename };
javac.compile(options);
这段代码展示了如何在程序中调用javac编译器。首先,创建一个javac对象,然后设置编译选项(包括类路径、输出目录和文件名),最后调用compile方法进行编译。

这需要将内容写入文件。不幸的是,部署环境的多样性使得这种方法变得不可行。对于这个好的建议,点赞! - Ryan Emerle
最终结果需要什么? - TofuBeer

3
所有的应用服务器都能实现JSP的永久缓存,所以这显然是可行的。也许可以查看Tomcat源代码来了解更多?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接