Java

Maven Central Repository へのライブラリ登録方法

注意! このエントリの情報は陳腐化しています。もう参考にならないのでこちらを見てください

Maven はライブラリの依存関係さえ XML ファイルに記載しておけばビルド時に勝手に必要な jar ファイルをダウンロードしてきてくれるという超便利ツールです。
しかし、ダウンロードできるのはもちろんリポジトリに登録されているライブラリのみ。
デフォルトのリポジトリである Central Repository に登録されていない場合はローカルに手動で登録するか、Webサーバを立てて自前でリポジトリを構築する必要があります。

自分だけ、プロジェクト内だけで使うオレオレライブラリならローカルにインストール、または自前リポジトリで良いですが広く使って貰いたいライブラリはやはり Central Repository に登録してみたいところ。

セントラルリポジトリにライブラリを登録する方法は2つあって、一つは、jarファイルを単発で登録してもらう方法、もう一つは rsync でアクセス可能な状態にしておき、定期的に自分のサーバから吸い上げて貰う方法です。

毎回依頼するのは面倒なので今回は後者の方法で Twitter4J を登録してもらいました。

登録の仕方はもちろん本家に書いてあります。
Maven – Guide to uploading artifacts to the Central Repository

rsync で同期して貰う方法をざっと要約すると以下の通り。

1. 最低限必要なメタデータは pom.xml に書いておく
具体的には modelVersion,groupId,artifactId,packaging,name,version,url,licenses,scm url,description,dependencies です。
特に注意しなければならないのは groupid が重複しないよう、プロジェクトをホストしているドメイン名から決定すること。
maven.apache.org であれば、パッケージの命名規則と同じく逆にならべて org.apache.maven になります。

2. 同期用のユーザを用意
OS の流儀に従って同期用にユーザを作ります。
習慣的に mavensync, mvnrepo, maven といったユーザ名が使われます。
何でも良いですが mavensync というユーザ名が一番多いようです。

2. 同期リクエスト用の csv フォーマットの情報を用意する
groupId: 例) org.apache.maven
location: 例) rsync over ssh 用: mavensync@shell.sourceforge.net:/home/groups/m/ma/maven-js-plugin/htdocs/m2repo または非セキュアな rsync 用: rsync://maven2.hortis.ch/releases
protocol: rsync_ssh または rsync
contactName: あなたのお名前
contactMail: emailアドレス(MLではないアドレス)
これらの情報をカンマ区切りで以下のように:

"org.apache.maven","mavensync@shell.sourceforge.net:/home/groups/m/ma/maven-js-plugin/htdocs/m2repo","rsync_ssh","John Doe","doe@doe.com",,
"org.apache.maven","rsync://maven2.hortis.ch/releases","rsync","John Doe","doe@doe.com",,

※最後の2つのカンマは意味不明ですが内部利用のために用意されているため省略可だそうです

3. 接続を許可するため公開鍵をサーバに登録
公開鍵はココにあります。
だいたいこんな感じ:

cd
mkdir .ssh
chmod 700 .ssh
echo "ssh-dss AAAAB3NzaC1kc3MAAACBAL9WxLqVn4DgS3pl6XrHQ467FLfhX+9ESYUQNsmqOxsubixtVVfiNFDpDI/LlSZSs9YcKr6XUMrVy58y3yg8pxR+T+4h3xGlUIhr/YJ60z02X7mSYNa8S2uVVL2Gou8z/GjDJnlY1GGzqXwKI07WdQ8QSAK8AYgAAZfVzn4VbCcjAAAAFQCnVrFfasrKOb6s8gteHeYyYPgndwAAAIEAhtVdf/cQ+KuzBQQqEhz9O7rqSh5GqZE177oY+2lPNpR8lKg2TRk87j3sh506gmpk82Gm4RvAOBOI6zEwLoOLsR+ucVSzUfhqgGanUworHVUnGQ7mIBqBq91JVVGORfVfK5/omi0ShIdhyZscf3vmeE3GiYtH8J3aUbGXxylkpLYAAACAOBk/ghnjuujhVo4sypxn0ATVLJ4ZcyHkl2vC4SE6VQ2XgYQv3P+NLbQtKoiNASifF1V0sOrzXxPzhPwWoh+8SxVqVLui7VC+2MKgd3etBJ3tllXIjgsxL9k8LxfDwsM+3dmICf28YQePRt4XkXADthdhOdkgG7MnpSidVmNBgDc= maven@beaver.codehaus.org" >> .ssh/authorized_keys2
chmod 600 .ssh/authorized_keys2

4. Jira に登録リクエスト用 issue を登録
Codehaus の Jiraに先ほど用意した csv を貼り付けて issue を作ります。
同時に、ドメインを保有している証拠を提示すること。
例えばドメイン内に自分の名前が掲載されている場所とか、whois のクエリ結果のページへのリンクとかです。

5. リポジトリメンテナンスのメーリングリストを購読
同期の状況を把握するためrepo-maintainers mailing list購読するか、フィードを RSS リーダなどで購読します。

6. 待つ
数日で同期リストに取り込まれます。

以上です。

私はちょっとハマったのが2つあって、一つは groupid をドメイン名の逆向きにするのを忘れたこと。yusuke.homeip.net なので net.homeip.yusuke にすべきです。
幸い人手で登録してもらっているので、「おいおい、ちゃんと逆順にしてくれよ」と指摘してくれました。

もう一つは、同期が始まってしばらく