簡體   English   中英

將擴展模塊添加到 groovy 類

[英]add extension module to groovy class

我正在嘗試創建簡單的extension module

我創建了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

我編譯ItemExtension.groovy使用groovyc (我預編譯Main.groovy為了獲得Item類)

groovyc ItemExtension.groovy

使用META-INF編譯ItemExtension.class我放入.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)

我做錯了什么?

您的擴展方法必須是靜態的才能被識別(因為擴展模塊必須是無狀態的)並且Item類必須存在於它自己的源文件中才能被識別(因為否則它是腳本的內部類)。

這是一個可以執行您想要的操作的 bash 腳本:

#!/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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM