-1

我想嵌入一个调用构建器的 groovy 脚本。

所以,我有这个:

def cfg = new CompilerConfiguration()

cfg.setScriptBaseClass("SpoofBuilder")

def sh = new GroovyShell(this.class.classLoader, new Binding(), cfg)

sh.evaluate(new File("test.builder"))

SpoofBuilder 的复制来源:

http://groovy.codehaus.org/BuilderSupport

test.builder 包含

a {
    b { }
}

结果是 createNode 被传递给 main 方法:

cn2 main [] nc null x

如何使“a”被调用?

4

1 回答 1

0

感谢没有答案给可爱的投票者,因为他们对世界只贡献了仇恨。

所以,我有一个蹩脚的解决方案。GroovyShell 最终使用 InvokerHelper.createScript,如果解析的类不是从 Script 派生的,它会调用 main。所以,本质上,我可以评估一个脚本并让它调用构建器。但是,我只是想出了如何通过将文本粘贴在一起并对其进行评估来使其工作。粘贴在一起的文本如下所示:

class PoorSolution extends Script {
  def run() {
    new BadBuilder().a {
      b { }
    }
  }
}

class BadBuilder extends BuilderSupport {
  protected Object createNode(String name) {
    ...
  }
  ...
}

我更喜欢使用 GroovyScriptEngine 以便脚本在更改时重新加载。但是,这不适用于粘贴在一起而不是在文件中的脚本。

于 2013-09-26T01:04:04.093 回答