Варианты динамической компиляции в 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 может быть?