Параметры динамической компиляции в Java 5
-
05-09-2019 - |
Вопрос
Существуют ли какие-либо варианты, отличные от Janino, для компиляции "на лету" и выполнения Java-кода в версии 5?Я знаю, что в версии 6 есть API компилятора, но мне нужно работать с виртуальной машиной версии 5.
По сути, мне нужно взять строку, содержащую полный класс Java, скомпилировать ее и загрузить в память.
Решение
То, что вы хотите, это что-то вроде Джанино.Мы используем его в течение многих лет.Вы даете ему (почти стандартный) код, и он предоставляет вам классы, чтобы вы могли их использовать.На самом деле он имеет довольно много различных режимов и поддерживает синтаксический сахар 1.5, автоматическую упаковку и тому подобное.
Если вы вызовете javac, вам нужно будет не только быть готовым ко всему, что он делает, но и поместить класс в нужное место или создать дополнительный classloader.
Джанино - это очень просто.Это должно быть именно то, что вы ищете.
Другие советы
Программный вызов 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);
Все серверы приложений делают это для JSP навсегда, так что, очевидно, это возможно.Может быть, проверить исходный код tomcat?