0

当通过 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));

它失败了(预先设置了启用调试的编译器配置)。

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

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

关于我可以尝试什么的任何提示?

谢谢和最好的问候,蒂莫

4

1 回答 1

1

因此,无论我尝试什么(在文件、URL 和 URI 之间 - 使用和不使用直接类加载器)至少在一种情况下都失败了:

  • 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();
于 2013-04-16T11:45:16.910 回答