Есть две вещи, о которых стоит упомянуть:
если вы хотите оценить скрипт Groovy, вам может потребоваться использовать
new ScriptEngineManager().getEngineByExtension("groovy");
скрипт, переданный методу engine.eval()
, должен быть допустимым Groovy-кодом. Код сценария, который вы передали методу eval, не является допустимым кодом Groovy - вы ожидаете интерполировать строку, но вы не поместили ее в двойные кавычки.
Рассмотрим следующий пример:
ScriptEngine engine = new ScriptEngineManager().getEngineByExtension("groovy");
ScriptContext context = engine.getContext();
Bindings bindings = context.getBindings(ScriptContext.ENGINE_SCOPE);
bindings.put("x","Guest");
Object result = engine.eval("\"Hello, ${x}\"", context);
System.out.println(result);
Выход:
Hello, Guest
Кроме того, вы можете передать Groovy-скрипт, который печатает интерполированный скрипт. В этом случае код может выглядеть следующим образом:
ScriptEngine engine = new ScriptEngineManager().getEngineByExtension("groovy");
ScriptContext context = engine.getContext();
Bindings bindings = context.getBindings(ScriptContext.ENGINE_SCOPE);
bindings.put("x","Guest");
engine.eval("println \"Hello, ${x}\"", context);
Создает тот же вывод, но не присваивает Hello, Guest
переменной.