Компилировать динамически сгенерированный класс во время выполнения без записи в файл

Я генерирую 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
Другие вопросы по тегам