3

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

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

1 回答 1

1

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

它可能不是您的解决方案,但如果您改为使用 调用脚本GroovyShell,那么它几乎可以开箱即用。

例子:

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

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

于 2013-06-27T18:27:10.187 回答