我正在尝试从 JUnit 测试中调试 Eclipse 中的 Groovy 脚本。Groovy 代码是在 Tomcat 中运行的大型 Java 应用程序的一部分。由于各种原因,我们的系统设置为使用已编译的 JSR223 表达式。这是缩写的代码片段:
GroovyScriptEngineImpl engine = new GroovyScriptEngineImpl();
Resource r =
new ClassPathResource("groovy/transformations/input/Foo.groovy");
String expression = IOUtils.toString(r.getInputStream());
CompiledScript script = engine.compile(expression);
String result = (String) script.eval(new SimpleBindings(bindings));
测试运行良好,但即使我在 Foo.groovy 中设置了断点,并且文件位于类路径中,调试时断点也不会被命中。我猜这不起作用,因为字符串格式的表达式与包含它的实际文件之间没有关联。那么有没有办法在字符串与其对应的文件名之间创建这种关联?如前所述,我需要使用 CompiledScript。作为旁注,当使用这种方法时,我已经能够使用相同的 Groovy 脚本在调试器中命中断点:
Resource r =
new ClassPathResource("groovy/transformations/input/Foo.groovy");
GroovyShell shell = new GroovyShell(new Binding(bindings));
String str = (String) shell.evaluate(r.getFile());
当然,在这种情况下,Groovy 引擎直接加载文件。非常感谢有关如何使第一个示例工作的任何提示。谢谢。