2013-05-21 60 views
2

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

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

回答

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); 

只记得设置正确的包中的脚本,如果它不位于根。

+0

有用,谢谢〜 – ltebean