从IDEA调试在ScriptEngine中运行的Groovy脚本

时间:2013-05-21 02:48:30

标签: groovy intellij-idea breakpoints scriptengine

在我的应用程序中,我将类路径中的脚本文件加载到String中,然后将其传递给ScriptEngine。 Howerver,脚本文件中设置的断点不会触发。我怎样才能使它工作?我使用Intellij IDEA。

ScriptEngine engine = ...;
String script = FileUtils.readFileToString(file);
Bindings bindings = engine.createBindings();
Object result = engine.eval(script, bindings);

1 个答案:

答案 0 :(得分:0)

由于ScriptEngine.eval()方法仅将脚本视为String或通用Reader,因此我认为无法实现此目标。 GroovyScriptEngineImpl类将生成一个脚本名称并在运行时将其编译为一个类,这将使调试器很难(不可能?)知道哪个断点与正在运行的脚本相关联。

它可能不适合您,但如果您使用GroovyShell调用脚本,那么它几乎可以开箱即用。

示例:

File file = new File(scriptDir, "ScriptToRun.groovy");
Binding binding = new Binding();
Object result = new GroovyShell(binding).evaluate(file);

请记住,如果脚本不在根目录中,请在脚本中设置正确的包。