oinume journal

Scratchpad of what I learned

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

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.xmlGitHubのアカウント情報を記述

 

 

 

 

※このエントリで説明することは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.xmlGitHubのアカウント情報を記述

 

次に、下記の内容で ~/.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]