2009-06-15
プラグインの検索はどのように行われるか(There is no more plugin-registry.xml)
Hudoson で突然ビルドが通らなくなった。versionを指定しないと「プラグインが見つからない」とのたまわれる。こんな感じのありきたりの記述:
<extensions>
<extension>
<groupId>org.apache.maven.wagon</groupId>
<artifactId>wagon-webdav</artifactId>
</extension>
</extensions>
少しググると、同様の問題の記事はあるものの明確な解決策は version を書くことしか見あたらない。確かに version を書けばビルドは出来るようになります。しかし、ついさっきまで version 無しで動いていたものが動かないというのはどうも気持ちが悪い。
で、いろいろ調べて判明した事
- ビルド出来なくなる直前に Nexus で構築したリポジトリーミラーを参照するように
~/.m2/settings.xmlを変更した。 - ミラーを参照しないように戻しても依然ビルド不能。
- Maven - Introduction to the Plugin Registry には
~/.m2/plugin-registry.xmlの記述で、バージョンの解決を行っていると書かれている。このファイルの内容が、ミラーを参照したときに書き換わったのか? - しかし
plugin-registry.xmlなんてどこにもない。ミラーを使わないようにしても、挙動が元に戻らないのだから、どこかにversionを指定しない場合のプラグインバージョンを指定する情報が残っているはず。 - ちなみに、mavenは
org.apache.maven.wagon:wagon-webdav:jar:RELEASEを取得しようとしている。RELEASEは、レポジトリのメタファイルにRELEASEという名前でタグ付けされたバージョンがあればそれを使うということらしい。
結論
mvn -Uと指定するとリモートリポジトリのインデックスを検索して最新のプラグインを使用するようになる。これは1回だけ行えばよく、検索の結果はローカルリポジトリ内に記録される。突然ビルド出来なくなったのはNexusによるミラーを参照したためにプラグインが検索できなかったためで、これは別件。plugin-registry.xmlはもう現在のmavenでは作られない。リモートリポジトリからプラグインのバージョンを検索した結果(mvn -Uの結果)は<ローカルリポジトリ>/org/apache/maven/plugins/<プラグイン>ディレクトリの中にmaven-metadata-*.xml(*は多分リモートリポジトリのid)というファイルとしておかれる。*1
repository/org/apache/maven/wagon/wagon-webdav/maven-metadata-central.xmlの例:
<?xml version="1.0" encoding="UTF-8"?> <metadata> <groupId>org.apache.maven.wagon</groupId> <artifactId>wagon-webdav</artifactId> <versioning> <latest>1.0-beta-2</latest> <release>1.0-beta-2</release> <versions> <version>1.0-beta-1</version> <version>1.0-beta-2</version> </versions> <lastUpdated>20090325190912</lastUpdated> </versioning> </metadata>

