StringBuildersの代わりにGroovyのSimpleTemplateEngineを使用して出力を生成しようとしていますが、クラス内の他のメソッドを正常に呼び出すためのテンプレートを取得できません(最終的に他のテンプレートを呼び出してネストされたチェーンを形成します)。
テンプレート(以下の例)がメソッド<% generateItemOutput(itemDescriptor.itemList) %>
を呼び出すと、例外が発生します。
groovy.lang.MissingMethodException: No signature of method:
SimpleTemplateScript1.generateItemOutput() is applicable for
argument types: (java.util.ArrayList)
すべてのメソッドを静的にし、テンプレートの静的メソッドにインポートを追加しようとしましたが(ここで提案されているようにunable to resolve class ...
)、使用するインポートに到達します。
SimpleTemplateScript1.groovy: 1: unable to resolve class uk.co.e2x.convert.XMLToSlurp.generateItemOutput
@ line 1, column 20.
out.print(""""""); import uk.co.e2x.convert.XMLToSlurp.generateItemOutput ;
^
これが私がsなしでやっていることのサンプルですstatic
:
public String generateItemDescriptorOutput(itemDescriptor) {
def params = [itemDescriptor: itemDescriptor]
def template = new groovy.text.SimpleTemplateEngine().createTemplate(itemDescriptorTemplate())
def writeable = template.make(params)
return writeable.toString()
}
public String generateItemOutput(itemList) {
...
}
public String itemDescriptorTemplate() {
return = '''\
${itemDescriptor.name} {
repository = "${itemDescriptor.repository}"
props = [
<% generateItemOutput(itemDescriptor.itemList) %>
]
}
'''
}
私はそれをで呼び出しますがjava -cp ...
、groovyを介して呼び出すのと同じ問題が発生しました。Javaを介して呼び出すように移行した理由は、Groovyスクリプトで静的メソッドへのパッケージパスを計算できないためです。
テンプレート内から独自のスクリプト/クラスメソッドを呼び出す具体的な例を誰かが持っていますか、または私が間違っていることを教えてもらえますか?
乾杯。