Компилировать динамически сгенерированный класс во время выполнения без записи в файл
Я генерирую Java-исходники с JCodeModel и теперь хочу компилировать во время выполнения. Но я не хочу записывать файлы Java на диск раньше.
Насколько я вижу, динамическая компиляция возможна с помощью javax.tools.JavaCompiler ( см. Пример), но, похоже, мне нужен исходный код для этого.
К сожалению, я не могу найти способ напрямую получить исходный код из JDefinedClass. Кажется, что мне нужно записать JDefinedClass в объект File на диске и впоследствии прочитать исходный код.
Это действительно необходимо или есть какое-то решение?
1 ответ
Решение
Вы можете использовать следующий код, чтобы избежать дисковых операций и записать свой код непосредственно в память, используя SingleStreamCodeWriter
:
JCodeModel jCodeModel = createJCodeModel(); // create and prepare JCodeModel
ByteArrayOutputStream baos = new ByteArrayOutputStream();
CodeWriter codeWriter = new SingleStreamCodeWriter(baos);
jCodeModel.build(codeWriter);
String code = baos.toString(); // you can use toString(charset) if there are special characters in your code