来自classpath的GroovyShell调试脚本

时间:2013-04-15 15:41:16

标签: debugging groovy scripting classloader groovyshell

this did help me在通过GroovyShell调用时调试Groovy脚本非常多。 但是,当脚本通过完全限定的文件名加载时(例如file:///home/user/x/src/main/groovy/package/File.groovy),这仍然有效。

当我使用

URL url = Thread.currentThread().getContextClassLoader().getResource("src/main/groovy/package/File.groovy");
shell.parse(new File(url.toURI));

失败(预先设置启用了调试的CompilerConfiguration)。

因此,我的脚本驻留在类路径中并分配了包。它们同时执行(通过File直接和通过File + Classloader资源) - 但IDE调试仅在将其称为文件资源时才起作用(相对!所以使用“错误的”src / main / groovy / prefix。

仅供参考 - 以后脚本应该包含在JAR文件中,整个应用程序将作为WAR执行。

有关我可以尝试的任何提示吗?

谢谢和最诚挚的问候, 蒂莫

1 个答案:

答案 0 :(得分:0)

所以,无论我尝试了什么(在文件,URL和URI之间 - 使用和不使用直接的Classloader)都至少在一个案例中失败了:

  • WAR运行时(在依赖JAR时)
  • 从Maven发起的单元测试
  • 从IDE启动的单元测试

现在,我为这三种情况管理的唯一方法是直接使用GroovyCodeSource:

CompilerConfiguration cc = CompilerConfiguration.DEFAULT   
cc.setDebug(true)    
def shell = new GroovyShell(
    Thread.currentThread().getContextClassLoader(), 
    binding, 
    cc
)

scriptUrl = Thread.currentThread().getContextClassLoader().getResource(it);   
GroovyCodeSource gcs = new GroovyCodeSource(scriptUrl);

Script s = shell.parse(gcs);
s.run();