Так что я столкнулся с этой проблемой. Мы используем Java как наш язык сценариев, потому что мы уже используем его для всего остального, и для него не требуются дополнительные сторонние библиотеки.Компиляция/запуск .java-файлов во время выполнения против отражения
Теперь мы выполняем код выполнения через отражение. Что-то вроде:
Class triggerAction = null;
try {
triggerAction = Class.forName(actionName);
Gdx.app.log("Info", triggerAction.getName() + " attached to "
+ this.toString());
try {
this.triggerAction = (TriggerAction) triggerAction
.newInstance();
}
Это замечательно, но это не идеально. Любые файлы java, предназначенные для запуска во время выполнения, все равно должны быть скомпилированы в последнюю сборку. В идеале, не разработчики могли бы играть с файлами сценариев, хранящимися как в каталоге '/ scripts /', а затем просто запускать программу и выполнять модифицированный файл .java. Это то, чего я никогда не делал раньше, поэтому я немного не понимаю, как это сделать, чтобы это было безопасно для конечного пользователя.
Я нашел этот подход: Generating, compiling and using Java code at run time?
Но я не ожидал большинство конечных пользователей иметь настройки PATH и все это, поэтому я обеспокоен тем, что эти решения могут столкнуться с проблемами там. Какой здесь идеальный подход?
* Мы используем Java как наш язык сценариев * Подождите, что? Java определенно не является языком сценариев. Если вы хотите использовать язык сценариев, используйте JavaScript. С помощью Java 8 вы получаете полную java-версию версии движка JavaScript под названием [Nashorn] (http://www.oracle.com/technetwork/articles/java/jf14-nashorn-2126515.html), которую вы можете вызвать изнутри Java. В противном случае вы можете загружать классы во время выполнения, но это сложнее, поскольку вам нужно создать систему плагинов и [использовать загрузчик классов] (http://tutorials.jenkov.com/java-reflection/dynamic-class-loading -reloading.html). – Turing85
Итак, ваш вопрос: «Как я могу скомпилировать исходный файл Java во время выполнения?»? – immibis
Я не знал о Нашорне. Это интересно. Но как я могу взаимодействовать между скриптами и моей java-кодовой базой? –