JavaにはMavenっていう依存ライブラリの管理を行えるすごい便利なツールがあるんだ。RubyでいうところのRubyGems みたいなもんだよ。でもさぁ、RubyGems みたいに自分で作ったライブラリを簡単にアップロードするサーバがないんだよ。えっ、Nexus入れろって?そんなのイチイチ用意してらんないよね。えっ、WebDAV?ムリムリー。本当Javaってなんでもかんでも面倒くさいよね。
そんなあなたに朗報。GitHubリポジトリに特別なブランチを作ってMavenの設定をするだけで、GitHubリポジトリをMavenリポジトリにすることができるんだ。GitHubって本当に開発者に優しいサービスだよねー(-д☆)キラッ
※4/3追記:【最新版】Maven Central Repository へのライブラリ登録方法 #mavenに詳しくまとまっているんだけど、Maven Centralリポジトリにartifactを反映するのもそんなに大変ではないので、たぶんこっちの方がいい方法。
流れ
- pom.xmlにいくつか設定を加える
- maven deployする
※このエントリで説明することはHosting a Maven repository on githubと同じ内容なので、英語が得意な人はStackOverflowを見るべし。
pom.xml修正その1
対象のプロジェクト(モジュール)のpom.xmlに以下を追加する。
試しに下記を実行して、deploy先の mvn-repo ディレクトリにjarが置かれるか確認する。
$ mvn clean deploy
$ ls -R target/mvn-repo/
net/
target/mvn-repo//net:
lampetty/
target/mvn-repo//net/lampetty:
lampetty-commons/
target/mvn-repo//net/lampetty/lampetty-commons:
1.0.0/ maven-metadata.xml maven-metadata.xml.md5 maven-metadata.xml.sha1
target/mvn-repo//net/lampetty/lampetty-commons/1.0.0:
lampetty-commons-1.0.0-sources.jar
lampetty-commons-1.0.0-sources.jar.md5
lampetty-commons-1.0.0-sources.jar.sha1
lampetty-commons-1.0.0.jar
lampetty-commons-1.0.0.jar.md5
lampetty-commons-1.0.0.jar.sha1
...
~/.m2/settings.xmlにGitHubのアカウント情報を記述
次に、下記の内容で ~/.m2/settings.xmlファイルを作成する。なお、このファイルのパーミッションは他のユーザから見えないように 700 にしておくこと。
pom.xml修正その2
pom.xmlの properties に下記を追記する。ここで指定する"github"というのは ~/.m2/settings.xml のserverのidと同じものにする。
さらにpom.xmlの build の部分に下記を追記する。
もう1回mvn deployする。
$ mvn clean deploy
成功すると下記のようなメッセージが表示されて、pom.xmlで指定されたGitHubリポジトリのブランチにartifactであるjarファイルがアップロードされているはず。
...
[INFO] Creating tree with 16 blob entries
[INFO] Creating commit with SHA-1: 2ef011871b0ceb8e29321a2ac9f87648a22c1ff0
[INFO] Creating reference refs/heads/mvn-repo starting at commit 2ef011871b0ceb8e29321a2ac9f87648a22c1ff0
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 18.064s
[INFO] Finished at: Tue Apr 02 21:58:07 JST 2013
[INFO] Final Memory: 22M/480M
[INFO] ------------------------------------------------------------------------
例えば自分のサンプルプロジェクトである lampetty-commons のmvn-repoブランチにはこんな風にjarがアップロードされている。
ここにアップロードされているjarを使うには、通常のMavenリポジトリと同様に、使いたいプロジェクトのpom.xmlに下記のように記述すればいい。
その他TIPS
なお、deploy先のGitHubのリポジトリやブランチは自由に選べるので、対象のプロジェクトのmvn-repoブランチ以外にもdeployが可能だ。複数のJavaプロジェクトを持っているのであれば、artifact(jar)をdeployする専用のGitHubリポジトリを作成し、そこに集約しても良いだろう。例えば自分は maven-repo-lampetty.net というdeploy専用のGitHubリポジトリを作っている。
とにかくこれでいちいちNexusやらWebDAVサーバを用意する必要がなくなった。GitHub<ノ丶`Д´>ノ マンセー