2
我想创建简单的extension module
。添加扩展模块到groovy类
我创建Main.groovy
文件
class Item {
String item
}
new Item().sayHello() // this method supposed to be extension
我编译它(不跑)。
我创建ItemExtension.groovy
类
class ItemExtension {
def sayHello(Item self) {
println "hello world"
}
}
这是我org.codehaus.groovy.runtime.ExtensionModule
描述
moduleName=Item extension module
moduleVersion=1.0
extensionClasses=ItemExtension
我使用groovyc
编译ItemExtension.groovy
(我为了预编译Main.groovy
得到Item
类)
groovyc ItemExtension.groovy
编译ItemExtension.class
用META-INF
我把.jar
文件(改名为.rar
)。 它的结构是这样的
META-INF\services\org.codehaus.groovy.runtime.ExtensionModule
ItemExtension.class
我把ItemExtension.jar
在同一文件夹中Main.groovy
和再编译,但与cp
参数添加jar
。
groovyc -cp ItemExtension.jar Main.groovy
但是当我尝试运行它
groovy Main
我得到这个例外
Caught: groovy.lang.MissingMethodException: No signature of method: Item.sayHell
o() is applicable for argument types:() values: []
groovy.lang.MissingMethodException: No signature of method: Item.sayHello() is a
pplicable for argument types:() values: []
at Main.run(Main.groovy:6)
我做了什么错?
嗯。没有帮助 – lapots
哦,我也错过了使用扩展jar(这不是必须的,因为你的代码是动态的)编译的事实,但运行*没有*它。在执行脚本时,扩展必须位于classpath上: 'groovyc Main.groovy' then groovy -cp ItemExtension.jar Main.groovy' 应该工作 – melix
仍然不起作用。我想我需要重新阅读文档。也许忽略了一些东西(如静态) – lapots