Мне нужно запустить некоторый внешний код из моего Java-приложения, который будет часто обновляться и ортогонально по отношению к остальной части приложения. Поскольку я не хочу повторно развертывать все приложение при каждом изменении кода (а также по другим причинам), мы решили использовать groovy для этого кода и сохраните его либо в файловой системе, либо в базе данных.
Из документации я понимаю, что у меня есть два способа запуска кода: использование GroovyShell или GroovyClassLoader (eval здесь не подходит)
Каковы плюсы и минусы каждого метода?
Ответ 1 · рейтинг 3 · Peter Niederwieser
GroovyShell использует GroovyClassLoader внизу. Используйте GroovyShell, если вам не нужна функция, предоставляемая только GroovyClassLoader.
Ответ 2 · рейтинг 2 · djangofan
GroovyShell использует загрузчик классов по умолчанию до тех пор, пока вы не загрузите что-то в сценарии, который настраивает путь к классам, затем он переключается на пользовательский GroovyClassLoader, что может вызвать проблемы с загрузкой некоторых драйверов jdbc или элементов jndi и т. д. Итак, если ваш загрузчик классов по умолчанию уже имеет classpath, который ему нужен, и , и если вы можете избежать создания экземпляра нового объекта GroovyClassLoader в своем коде Java, то загрузка сценария оболочки с помощью простого GroovyShell будет использовать загрузчик классов по умолчанию, и вам будет лучше для него.
Надеюсь, я понял ваш вопрос.