我开发了许多由Serviio用作插件的groovys。 这些插件使用的许多方法都很常见,但是在进行更改时,每个插件都需要更新。因此,我想从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
任何关于如何使这些解决方案都有效的建议将不胜感激。
答案 0 :(得分: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"
}
}