GitHubをMavenリポジトリにしよう

·3 分で読めます

JavaにはMavenっていう依存ライブラリの管理を行えるすごい便利なツールがあるんだ。RubyでいうところのRubyGems みたいなもんだよ。でもさぁ、RubyGems みたいに自分で作ったライブラリを簡単にアップロードするサーバがないんだよ。えっ、Nexus入れろって?そんなのイチイチ用意してらんないよね。えっ、WebDAV?ムリムリー。本当Javaってなんでもかんでも面倒くさいよね。

そんなあなたに朗報。GitHubリポジトリに特別なブランチを作ってMavenの設定をするだけで、GitHubリポジトリをMavenリポジトリにすることができるんだ。GitHubって本当に開発者に優しいサービスだよねー(-д☆)キラッ

※4/3追記:【最新版】Maven Central Repository へのライブラリ登録方法 #mavenに詳しくまとまっているんだけど、Maven Centralリポジトリにartifactを反映するのもそんなに大変ではないので、たぶんこっちの方がいい方法。

流れ

  • pom.xmlにいくつか設定を加える

  • ~/.m2/settings.xmlにGitHubのアカウント情報を記述

  • maven deployする

※このエントリで説明することはHosting a Maven repository on githubと同じ内容なので、英語が得意な人はStackOverflowを見るべし。

pom.xml修正その1

対象のプロジェクト(モジュール)のpom.xmlに以下を追加する。

internal.repo

Temporary Staging Repository

file://${project.build.directory}/mvn-repo

試しに下記を実行して、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 にしておくこと。

github

YOUR-USERNAME

YOUR-PASSWORD

pom.xml修正その2

pom.xmlの properties に下記を追記する。ここで指定する"github"というのは ~/.m2/settings.xml のserverのidと同じものにする。

github

さらにpom.xmlの build の部分に下記を追記する。

com.github.github

site-maven-plugin

0.7

Maven artifacts for ${project.version}

true

${project.build.directory}/mvn-repo

refs/heads/mvn-repo

**/*

YOUR-REPOSITORY-NAME

YOUR-GITHUB-USERNAME

site

deploy

もう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に下記のように記述すればいい。

lampetty-commons-github

https://raw.github.com/oinume/lampetty-commons/mvn-repo/

true

always

その他TIPS

なお、deploy先のGitHubのリポジトリやブランチは自由に選べるので、対象のプロジェクトのmvn-repoブランチ以外にもdeployが可能だ。複数のJavaプロジェクトを持っているのであれば、artifact(jar)をdeployする専用のGitHubリポジトリを作成し、そこに集約しても良いだろう。例えば自分は maven-repo-lampetty.net というdeploy専用のGitHubリポジトリを作っている。

とにかくこれでいちいちNexusやらWebDAVサーバを用意する必要がなくなった。GitHub<ノ丶`Д´>ノ マンセー

[tmkm-amazon]477415184X[/tmkm-amazon]