GroovyでXML-RPCを使う
以前、GroovyでXMLRPC経由でConfluenceのAPIにアクセスする方法について、以下のエントリを書きました。その際はXMLRPCのライブラリ追加方法には触れませんでしたが、GROOVY_HOMEのlibにjarを放り込んでいました。今回、Grapeという依存ライブラリ管理ツールを使う方法について書いておきます。
XML-RPCで添付ファイルを追加する
Grapeを使うとgroovyのソースコードにアノテーションを使って依存ライブラリを記述することができ、実行時に自動でライブラリがダウンロードされます。
XMLRPCを使う場合には、importに以下のようにアノテーションを付加します。
@Grab(group='org.codehaus.groovy', module='groovy-xmlrpc', version='0.7') import groovy.net.xmlrpc.*;
ただ、これだとsmackというライブラリが足りずエラーとなります。Mavenのセントラルリポジトリには3.0.1というバージョンはありません...うーむ。
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
General error during conversion: Error grabbing Grapes -- [unresolved dependency: jivesoftware#smack;3.0.1: not found]
結果的には以下のようにGrapeのアノテーションを付加すれば無事動作しました。
@Grab(group='org.codehaus.groovy', module='groovy-xmlrpc', version='0.7') @Grab(group='jivesoftware', module='smack', version='3.0.4') import groovy.net.xmlrpc.*;
xmlrpcとsmackのアノテーションが逆になっていると、java.lang.ExceptionInInitializerErrorが発生します。はじめてGrapeを使ったので、この例外だけだとどこが悪いのかわかりません。
また、Grapeの日本語ドキュメントは古いのか誤字なのか、ここの複数のアノテーションの書き方ではコンパイルエラーになります。上記のように複数@Grabアノテーションを付けるか、@Grabの配列を渡します。
@Grapes([ @Grab(group='commons-primitives', module='commons-primitives', version='1.0'), @Grab(group='org.ccil.cowan.tagsoup', module='tagsoup', version='0.9.7')])