1

我开发了一些 groovys 用作 Serviio 的插件。这些插件使用的许多方法都很常见,但是当进行更改时,每个插件都需要更新。因此,我想在 tools.groovy 的每个插件中“包含”这些方法。我尝试了其他帖子中建议的 2 种不同方法。

我尝试使用

evaluate(new File("C:\\Program Files\\Serviio\\plugins\\tools.groovy"))

在 tools.groovy 刚刚拥有的每个插件的开头

class Tools{method1{return}method2{return}}

但是在执行插件时我得到

Caught: groovy.lang.MissingMethodException: No signature of method: Tools.main() is applicable for argument types: () values: []

如果我再添加

void main(args) { } 

到类工具,错误消失了,但运行的是 Tools.main 而不是 plugin.main,我没有得到任何输出。

我建议的第二种方法是使用

def script = new GroovyScriptEngine( '.' ).with {
  loadScriptByName( 'C:\\Program Files\\Serviio\\plugins\\tools.groovy' )
} 
this.metaClass.mixin script

然而,这给出了错误

unexpected token: this @ line 55, column 2.
this.metaClass.mixin script

任何有关如何使这些解决方案发挥作用的建议将不胜感激。

4

1 回答 1

0

您是否尝试定义一个通用的基本脚本并将其作为编译器配置提供。

http://groovy.codehaus.org/Embedding+Groovy

从 groovy 文档中...

class ScriptBaseTest {

  @Test
  void extend_groovy_script() {
    def compiler = new CompilerConfiguration()
    compiler.setScriptBaseClass("ScriptBaseTestScript")

    def shell = new GroovyShell(this.class.classLoader, new Binding(), compiler)

    assertEquals shell.evaluate("foo()"), "this is foo"
  }
}

abstract class ScriptBaseTestScript extends Script {
  def foo() {
    "this is foo"
  }
}
于 2013-04-03T06:49:42.030 回答