groovy嵌入构建器作为脚本基类?

时间:2013-09-17 04:28:13

标签: groovy

我想嵌入一个调用构建器的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 主要 [] NC 空值 X

如何调用“a”?

1 个答案:

答案 0 :(得分: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,以便在脚本更改时重新加载。但是,这不适用于粘贴在一起但不在文件中的脚本。