Способ, изначально описанный в вопросе выше, вызывающем исполняемый файл groovy, вызывает второй экземпляр среды выполнения Java и загрузчик классов, в то время как эффективный способ заключается в том, чтобы встроить скрипт Groovy непосредственно в среду выполнения Java как класс Java и вызвать его.
Вот три способа, чтобы выполнить Groovy скрипта из Java:
1) Простейший путь с помощью GroovyShell:
Вот основная примера программа Java и целевой Groovy скрипта для вызова:
== == TestShell.java
import groovy.lang.Binding;
import groovy.lang.GroovyShell;
// call groovy expressions from Java code
Binding binding = new Binding();
binding.setVariable("input", "world");
GroovyShell shell = new GroovyShell(binding);
Object retVal = shell.evaluate(new File("hello.groovy"));
// prints "hello world"
System.out.println("x=" + binding.getVariable("x")); // 123
System.out.println("return=" + retVal); // okay
== hello.groovy ==
println "Hello $input"
x = 123 // script-scoped variables are available via the GroovyShell
return "ok"
2) Далее следует использовать GroovyClassLoader, чтобы проанализировать сценарий в классе, а затем создать экземпляр его. Этот подход рассматривает скрипт Groovy как класс и вызывает на нем методы как на любом Java-классе.
GroovyClassLoader gcl = new GroovyClassLoader();
Class clazz = gcl.parseClass(new File("hello.groovy");
Object aScript = clazz.newInstance();
// probably cast the object to an interface and invoke methods on it
3) Наконец, вы можете создать GroovyScriptEngine и передать объекты в качестве переменных с помощью связывания. Это запускает скрипт Groovy как скрипт и передает входные данные с использованием переменных привязки, а не вызывает явные методы с аргументами.
Примечание. Этот третий вариант предназначен для разработчиков, которые хотят встроить groovy-скрипты в сервер и перезагрузить их при модификации.
import groovy.lang.Binding;
import groovy.util.GroovyScriptEngine;
String[] roots = new String[] { "/my/groovy/script/path" };
GroovyScriptEngine gse = new GroovyScriptEngine(roots);
Binding binding = new Binding();
binding.setVariable("input", "world");
gse.run("hello.groovy", binding);
System.out.println(binding.getVariable("output"));
Примечание: Вы должны включить groovy_all баночку в вашем CLASSPATH для этих подходов к работе.
Ссылка: http://groovy.codehaus.org/Embedding+Groovy
Вы добавили Groovy на свой путь переменной окружающей среды? – BlackHatSamurai
Почему бы вам [запустить его напрямую] (http://groovy.codehaus.org/Embedding+Groovy); это то, что он предназначен, чтобы сделать ... –
@Blaine, да, я проверил это. –