Java 5中动态编译的选项

时间:2009-02-19 17:05:23

标签: java compiler-construction dynamic-compilation janino

除了Janino之外,还有其他选项可以在v5中实时编译和执行Java代码吗?我知道v6有编译器API,但我需要使用v5 VM。

我基本上需要获取一个包含完整Java类的字符串,编译它并将其加载到内存中。

3 个答案:

答案 0 :(得分:6)

你想要的是Janino。我们已经使用了很多年。你给它(接近标准)代码,它给你类,所以你可以使用它们。它实际上有很多不同的模式,并支持1.5语法糖和自动装箱等。

如果你打电话给javac,你不仅需要为它所做的任何事情做好准备,你还必须处理将课程放在正确的位置或制作一个额外的类加载器。

Janino很容易。它应该是你正在寻找的。

答案 1 :(得分: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);

答案 2 :(得分:2)

所有应用服务器都会为JSP做这件事,所以显然它是可能的。可以查看tomcat源代码吗?