Динамическая компиляция Java:BeanShell, Джанино, JavaCompiler?
-
21-09-2019 - |
Вопрос
Я собираюсь начать разработку небольшого настольного приложения Java.Приложение — это просто движок, для которого пользователь предоставляет классы Java для выполнения работы (преобразования ввода в вывод).
Я хотел бы, чтобы пользователь предоставлял реальные классы Java в виде файлов, которые можно загружать (и перезагружать) на лету.
Для этого конкретного использования есть ли причина, по которой Java будет более громоздкой, чем Groovy или Beanshell?Я не прошу сравнивать Groovy/Beanshell и Java, поскольку их много.Скорее, я хочу знать если проще динамически загружать классы Groovy или Beanshell из файлов по сравнению с Явой.
Для Java 1.6 это JavaКомпилятор лучший способ динамической загрузки кода?Я хотел бы использовать все возможности языка, поэтому думаю, что Янино отсутствует.И еще, есть ли проблемы с перезагрузкой?
Примечание:Я видел этот и этот, но я не уверен, что они ответят на мой вопрос.
Решение
JavaКомпилятор очень универсален, но влечет за собой небольшую потенциальную проблему с конфигурацией:В javax.tools, ToolProvider.getSystemJavaCompiler() идентифицирует класс компилятора как com.sun.tools.javac.api.JavacTool
.На некоторых платформах этот класс не является частью JRE;Кажется, требуется JDK.Вот пример.
Также рассмотрите javax.скрипт, обсуждается здесь.Несколько скриптовые движки поддерживаются.