【问题标题】:Debugging a compiled Groovy script in Eclipse在 Eclipse 中调试已编译的 Groovy 脚本
【发布时间】:2013-05-02 04:19:19
【问题描述】:

我正在尝试通过 JUnit 测试在 Eclipse 中调试 Groovy 脚本。 Groovy 代码是在 Tomcat 中运行的大型 Java 应用程序的一部分。由于各种原因,我们的系统设置为使用已编译的 JSR223 表达式。这是缩写代码sn-p:

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 引擎直接加载文件。非常感谢有关如何使第一个示例工作的任何提示。谢谢。

【问题讨论】:

  • 我忘了提到我在 Eclipse 的 Groovy 编译器设置中启用了“启用脚本文件夹支持”选项。

标签: eclipse debugging groovy scripting jsr223


【解决方案1】:

您完全正确,这与从字符串创建类有关。 GroovyScriptEngineImpl 喜欢为已编译的脚本指定任意名称,因为它假定所有内容都来自字符串。然而,GroovyShell 会根据脚本所来自的文件生成脚本名称,这是调试器需要的链接。

我可能会建议您避免使用 GroovyScriptEngineImpl 并改用 GroovyShell.parse。然后,您可以根据 GroovyShell.parse 的结果并使用新的 GroovyScriptEngineImpl 创建一个 GroovyCompiledScript。像这样的:

File f = getScriptFile();
Script s = new GroovyShell().parse(f);
CompiledScript cs = new GroovyCompiledScript(new GroovyScriptEngineImpl(), s.getClass());
...

请注意,我还没有尝试过,但根据我的经验,这应该可行。

如果您感觉非常好,我会在 groovy 问题跟踪器上提出一个 jira,以确保您可以为使用 GroovyScriptEngineImpl 创建的脚本传递正确的名称。

【讨论】:

  • 安德鲁,非常感谢!这就像一个魅力。我想我可以用你的食谱来解决这个问题!非常感激。如果您向我展示 Groovy Jira 问题跟踪器的链接,我肯定会根据您的建议提交 RFE。再次感谢,我希望这对其他人也有用。
  • 问题跟踪器在这里:jira.codehaus.org/browse/GROOVY 通常,如果答案对您有用,您可以通过单击检查接受答案。
  • 安德鲁,有没有办法在不创建帐户和登录的情况下创建问题?谢谢。
  • 不,您必须创建一个帐户。但是,如果您在邮件列表中清楚地解释该问题并进行讨论,其他人可能会为您提出该问题。
猜你喜欢
  • 1970-01-01
  • 2010-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-21
  • 2016-08-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多