Компиляция Java-кода «на лету» в памяти для Java 5 и Java 6.JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Компиляция Java-кода «на лету» в памяти для Java 5 и Java 6.

Сообщение Anonymous »

Как скомпилировать Java-код из произвольной строки (в памяти) в Java 5 и Java 6, загрузить его и запустить для него определенный метод (предопределенный)?

Прежде чем разжечь эту тему, я просмотрел существующие реализации:
  • Большинство из них полагаются на API компилятора Java 6.
  • Те, кто этого не делает, полагаются на уловки.
  • Да, я проверил commons-jci. Либо я слишком туп, чтобы понять, как это работает, либо это просто не так.
  • Я не смог найти, как передать компилятору мой текущий путь к классам (который довольно огромен).
  • В работающей реализации (в Java 6) я не смог найти, как правильно загружать внутренние классы (или внутренние анонимные классы).
  • Мне бы очень хотелось, чтобы все это хранилось в памяти, поскольку оно выполняется на нескольких средах.
Я уверен, что эта проблема уже была решена раньше, но я не могу найти ничего, что выглядело бы хотя бы наполовину производственным качеством. google (кроме jci, которым, как я уже говорил, мне не удалось воспользоваться).

Редактировать:
  • Я просмотрел JavaAssist – мне нужны внутренние классы, Java Поддержка уровня языка 5.0 и компиляция со всем путем к классам. Кроме того, я хотел бы создавать новые классы на лету. Я
    могу ошибаться, но я не смог найти, как это сделать с помощью JavaAssit.
  • Я хочу использовать решение на основе файловой системы (вызывающее javac), но Я не знаю, как определить путь к классам или как позже загрузить файлы (которых нет в моем пути к классам) с помощью специального загрузчика классов, который можно повторно использовать для нескольких вызовов. Хотя я знаю, как это исследовать, я бы предпочел готовое решение.
Edit2:
На данный момент я Я доволен BeanShell «оценкой». По-видимому, он делает все, что мне нужно (получить строку, оценить ее в контексте «текущего» пути к классам. В нем отсутствуют некоторые функции Java 5, но он может использовать перечисления (не определять) и скомпилировать «общие» (стертые) ) классов, поэтому этого должно быть достаточно для того, что я хочу.

Я пока не хочу отмечать ответ как принятый, так как надеюсь на лучшее решение появится.

Редактировать3: принял предложение beanshell — оно действительно прекрасно работает.

Подробнее здесь: https://stackoverflow.com/questions/616 ... and-java-6
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»