Варианты динамической компиляции в Java 5

Есть ли другие варианты, кроме Janino, для компиляции на лету и выполнения кода Java в v5? Я знаю, что в v6 есть API компилятора, но мне нужно работать с виртуальной машиной v5.

По сути, мне нужно взять строку, содержащую полный Java-класс, скомпилировать ее и загрузить в память.

3 ответа

Решение

То, что вы хотите, это что-то вроде Янино. Мы использовали его годами. Вы даете ему (почти стандартный) код, и он дает вам классы, чтобы вы могли их использовать. Он на самом деле имеет несколько различных режимов и поддерживает синтаксический сахар 1.5, автобокс и тому подобное.

Если вы вызываете javac, вы не только должны быть готовы ко всему, что он делает, но затем вам нужно будет поставить класс в нужное место или создать дополнительный загрузчик классов.

Янино очень легко. Это должно быть именно то, что вы ищете.

Вызов 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, имя файла  
   };

   javac.compile(варианты);

Все серверы приложений делают это для JSP навсегда, так что, очевидно, это возможно. Оформить заказ исходный код Tomcat может быть?

Другие вопросы по тегам