Mavenリポジトリのアーティファクト一括抽出するスクリプト
明けましておめでとうございます。まったく新年と関係ないエントリから始まりますが、今年もよろしくお願いします。
この休みで少しでもGroovyに慣れようとまたちょいプロ作ったので、簡単に紹介します。
概要
今回作成したのは、RepoArtifactExtractorというGroovyスクリプトです。Mavenリポジトリをばーっと検索して、リポジトリに登録されている最新アーティファクトの一覧をみんな大好きExcelさんにばーっと書きだしてくれます。こんな感じに。
セントラルリポジトリに登録されているものはMaven Repository: Search/Browse/Exploreとか使えば簡単に検索できるけど、インハウスリポジトリとか建てたときにアーティファクト一覧をばーっと見たいときに使えるでしょう。ま、SonatypeのNexus使えばって話もごもっともですがw*1
実行方法
Githubにソースを置いてます*2。結構ベッタベタな書き方で、お世辞にも美しくはないです。
こちらをpullしてからーの下記のコマンドで、(groupId, artifactId, version)とおまけでivy形式の設定内容が記載されたExcelファイルが作成されます。
/usr/bin/groovy RepoArtifactExtractorScript.groovy artifacts.xls http://maven.seasar.org/maven2/org/seasar/cubby/ (本当は1行)
あとは、これをCRONなりHudsonの定期実行なりで1日1回でも回しておけば。
余談
今回、中身はPOI*3 + NekoHTMLでのHTMLスクレイピングという構成なので、大して目新しいものはありません。なんで、余談的にいくつか。
HTMLスクレイピング
上記で示したコマンド実行例ではSeasarのリポジトリを対象にしていますが、ルートからではなく"http://maven.seasar.org/maven2/org/seasar/cubby/"のようにCubbyというプロダクトだけに絞っています。ご存知の通り、HTMLスクレイピングはWebサーバに負担をかけるんで、検証では極力小さい範囲のスクレイピングで済むようにしていました。もちろん、スクリプトの処理自体も極力負荷を抑えるように小細工はしてますが。
スクレイピングのご利用は、計画的に。
Grape
GroovyのGrapeを使うと、単体のgroovyファイルだけで依存Jarの解決ができます。Groovyの実行環境さえあれば(pom.xmlなどの設定ファイルが不要で)スクリプトファイルをポンと渡すだけで動かすことができるんですね。シェルスクリプトの代わりにGrape付きGroovyスクリプトを呼び出すとかも、効果的な使い方かな。
Grapeの詳細は、id:ksky さんの↓の資料を見てもらえれば。
POMの解析
プログラム上からPOMを解析するには、ModelBuilderクラス辺りを使えばできます。使用方法は、テストケースから何となく分かるでしょう。
ただ、結局このAPIは使わずにベタにPOMをXMLとして解析しています。(ValidationLevelを最低にしても)parentのpomを参照しにいくみたいで、Mavenリポジトリ上のディレクトリ構造ではparentが参照できずに解析エラーとなってしまうケースがあったので。
Excelの処理
ひっそりとGExcelAPI v0.2をリリースしました - 豆無日記がよさそうだったので、当初はPOIの代わりにこれを使おうと考えてました。ただ、これってExcelファイルの参照しかできないんですよね。残念><
POIに比べて直感的で分かりやすかったんで、更新ができるようになるといいなぁ・・・とプレッシャーをかけてみるテスト。