Можно ли динамически генерировать строки кода Java из строк Xtend?

В Java можно компилировать и загружать классы во время выполнения из исходного кода, содержащегося в строках (например, с помощью javax.tools.JavaCompiler, EclipseCompiler или Janino ). Этот процесс может быть полностью в памяти, без записи каких-либо временных файлов.

Язык Xtend работает путем преобразования исходного кода Xtend в исходный код Java с последующей его компиляцией. (Поправьте меня, если я ошибаюсь.) Можно ли преобразовать строку, содержащую исходный код Xtend, в строку, содержащую исходный код Java, чтобы затем я мог использовать свой любимый динамический компилятор? Я хочу превратить исходники Xtend в загружаемые классы во время выполнения*. Если это возможно, какие функции/классы вам нужно вызвать для этого?

* Время выполнения = нет Eclipse-IDE, нет JDK (только JRE), используется только Расширить зависимости.


person Jim Pivarski    schedule 05.02.2014    source источник


Ответы (1)


Xtend имеет плагин Maven. Он использует XtendBatchCompiler. Должна быть возможность вызывать его из чистой Java, ANT и т.д.

person Christian Dietrich    schedule 05.02.2014
comment
Да, я знаю (спасибо, однако). Я надеялся, что кто-нибудь может рассказать мне более подробно --- этот API работает путем изменения состояния (например, функция компиляции возвращает логический, а не скомпилированный код), поэтому функции должны вызываться в каком-то порядке, а не в каком-то другом. Кроме того, режим плагина Maven по умолчанию будет генерировать файлы, и я хотел бы сделать все это в памяти (необходимо для некоторых сред, таких как Google App Engine). - person Jim Pivarski; 06.02.2014
comment
Я думал, что вы сможете использовать файловую систему в качестве временного хранилища для чтения/записи из/в для использования, посмотрите на org.eclipse.xtend.core.compiler.batch.Main.main(String[]) - person Christian Dietrich; 07.02.2014
comment
Может быть, вы можете использовать XtendCompilerTest из собственных тестов Xtends. - person Christian Dietrich; 07.02.2014