groovy - docs - grails documentation 2.4 4
agregar el módulo de extensión a la clase groovy (1)
Su método de extensión debe ser estático para ser reconocido (porque los módulos de extensión deben ser apátridas) y la clase Item
debe vivir en su propio archivo fuente para ser reconocido (porque de lo contrario es una clase interna del script).
Aquí hay un script bash que hace lo que quiere:
#!/bin/bash
echo "Create Item.groovy"
cat > ''Item.groovy'' <<-EOF
class Item {
String item
}
EOF
echo "Compile Item.groovy"
groovyc Item.groovy -d classes
echo "Create extension module class"
cat > ''ItemExtension.groovy'' <<-EOF
class ItemExtension {
static def sayHello(Item self) {
println "hello world"
}
}
EOF
echo "Create extension module descriptor"
mkdir -p classes/META-INF/services
cat > classes/META-INF/services/org.codehaus.groovy.runtime.ExtensionModule <<-EOF
moduleName=Item extension module
moduleVersion=1.0
extensionClasses=ItemExtension
EOF
echo "Compile extension module"
groovyc -cp classes ItemExtension.groovy -d classes
echo "Creating script.groovy"
cat > ''script.groovy'' <<-EOF
new Item().sayHello()
EOF
echo "Run script"
groovy -cp classes script.groovy
Estoy tratando de crear un extension module
simple.
Main.groovy
archivo Main.groovy
class Item {
String item
}
new Item().sayHello() // this method supposed to be extension
Lo compilé (no corrí).
ItemExtension.groovy
clase ItemExtension.groovy
class ItemExtension {
def sayHello(Item self) {
println "hello world"
}
}
Este es mi descriptor org.codehaus.groovy.runtime.ExtensionModule
moduleName=Item extension module
moduleVersion=1.0
extensionClasses=ItemExtension
ItemExtension.groovy
usando groovyc
(precompilé Main.groovy
para obtener la clase de Item
)
groovyc ItemExtension.groovy
Compilado ItemExtension.class
con META-INF
I puesto en el archivo .jar
(renombrado .rar
). Su estructura se ve así
META-INF/services/org.codehaus.groovy.runtime.ExtensionModule
ItemExtension.class
Puse ItemExtension.jar
en la misma carpeta que Main.groovy
y lo compilé de nuevo pero con el argumento cp
para agregar jar
.
groovyc -cp ItemExtension.jar Main.groovy
Pero cuando intento ejecutarlo
groovy Main
Me sale esta excepción
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)
¿Que hice mal?