documentacion docs groovy extension-modules

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?