我已经开发了许多groovys作为Serviio的插件。这些插件使用的许多方法都是通用的,但当进行更改时,每个插件都需要更新。因此,我想在每个来自tools.groovy的插件中“包含”这些方法。我已经尝试了其他帖子中提出的两种不同的方法。
我试着用
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
任何关于如何使这些解决方案工作的建议都将不胜感激。
发布于 2013-04-03 14:49:42
你有没有尝试定义一个通用的基础脚本,并将其作为编译器配置。
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"
}
}
https://stackoverflow.com/questions/15748405
复制相似问题