GitHubにMavenリポジトリを作り、GitHub Pagesで公開する

さんざん使っているのだが、これについて書くのを忘れていた。自分のメモ書きとしても残しておきたいと思う。

概要

動機

GitHubで自作オープンソースライブラリの全ソースコードを公開するのは良いのだが、ユーザの利便性のためにビルド済アーティファクト(.jar等)を、何らかのMavenリポジトリにアップしておきたいと思った。自分が利用する側であれば、是非ともそうしておいて欲しいと思うだろう。

そこで、GitHub自体をMavenリポジトリとして使う方法は無いものかと探したわけだ。同じことを考える人間はいるもので、GitHub Pagesを使えばできるという。以下簡単に、どのようにしているかを記述する。

GitHub Pagesとは?

GitHub自体はGitのリポジトリであるので、そもそもウェブサイトのようにブラウザにてURLを指定してそれを表示できるような仕組みにはなっていない。

GitHub Pagesとは、あるGitリポジトリのmasterブランチの内容について、そのパスを指定すればウェブページとして取得できるという仕組みと考えればよい。

Mavenリポジトリとはウェブサイト

Mavenリポジトリとは、それを利用する側から見れば、ただのウェブサイトであり、特定のパスに特定のファイルが格納されているに過ぎない(ようである~あまり詳しく無いので)。

だから、あるGitリポジトリのmasterブランチにMaven用アーティファクトを置き、そのGitリポジトリをGitHub Pagesで公開すれば良いことになる。

具体的には、Mavenアーティファクトの置き場所としてのGitHubリポジトリが、https://github.com/ysugimura/mavenであり、そのmasterブランチのみが使われている。

そして、これをウェブページとして公開しているGitHub Pagesがhttps://ysugimura.github.io/mavenになる。

ただし、このウェブページのトップに何のファイルも置いて無い場合にはこのURLをオープンしても、404 Not Foundになることに注意。

※GitHub Pagesでは、自動でディレクトリインデックスを作成してくれる機能は無いようだ。必要であれば、(面倒なことに)自力でこれを作成する必要がある。–>これを簡単に作成するツールを作成した。index.htmlを自動生成するdirindexの紹介を参照のこと。

しかし、アーティファクトのURLを指定すればそれを取得することができる。例えばhttps://ysugimura.github.io/maven/com/cm55/lipermimod/2.1.4/lipermimod-2.1.4.jarになる。

GitHubでの操作

実際にGitHubでのリポジトリ作成と、そのGitHub Pagesとしての設定を見てみる。

まずは、GitHubでmavenというリポジトリを作成する。もちろん名前は何でもよい。

このmavenリポジトリのSettingsページを表示する。

下の方にスクロールすると、GitHub Pagesの設定があるので、ここでmaster branchを選択する。

※ただし、実際にはmasterブランチが無い状態で選択することはできない。masterブランチを作成した後の操作となる。

その下の「master branch /docs folder」というのはmaster branchの中の/docsフォルダだけを公開するということだ。使ったことが無いが、おそらく/docs以下のドキュメントだけをGitHub Pagesで公開するという意味なのだろう。

GitHub上でやることはたったこれだけだ。後は、中身を入れればそれをmavenリポジトリとして公開してくれる。

次に、私がやっている方法を見ていく。

Eclipse上でオープンソースライブラリを作成し、それをmavenリポジトリに公開するまで

※すべての操作にはEclipseのみを使用する。gitコマンドやその他のツールは一切使用しない。

仮に同じGitHub上にあるオープンソースライブラリlipermimodのアーティファクトをビルドし、それを上記で作成したmavenリポジトリで公開するものとする。必要なことは以下である。

  1. lipermimodを手元にクローンしてEclipseプロジェクトにする
  2. 空のmavenリポジトリを手元にクローンしてEclipseプロジェクトにする
  3. 1.をビルドし、作成されたアーティファクトを自動で2.に格納するようにする
  4. 変更された2.をコミットしてGitHubにプッシュする

これだけだ。4.の手順が一手間余計で、ビルドしたらただちにプッシュして欲しいものだが、現在のところやり方はわからない。以下順に見ていく。

GitHubのリポジトリをクローンしてEclipseプロジェクトにする

これについては、以下を参照してほしい。

特に注意すべき点としては、特にGitHub上のmavenという名前をつけたリポジトリについては、後者で説明した「Eclipseワークスペースの中にgitリポジトリを作る」を選択しないと、Eclipseプロジェクトでの階層構造とGitHub上での所望の階層構造にズレが生じてしまう。ここは注意しないといけない。

lipermimodをビルドする

lipermimodをビルドし、アーティファクトをmavenというEclipseプロジェクトに自動で格納する。これは、以下のbuild.gradleで行っている。

https://github.com/ysugimura/lipermimod/blob/master/build.gradle

publishing {
  publications {
    target(MavenPublication) {
      groupId  'com.cm55'
      artifactId 'lipermimod'
      version '2.1.4'    
      from components.java   
      artifact sourceJar
    }
  }  
  repositories {
    maven {
      url GITHUB_MAVEN            
    }
  }
}

この中のGITHUB_MAVENは、別途gradle.propertiesで「GITHUB_MAVEN=file:///C:/devel/workspace/github_maven」などと定義している。これは先のmaven用のEclipseプロジェクトの場所を示している。

mavenのEclipseプロジェクトをコミットし、プッシュする

lipermimodをビルドしたら、自動的にmavenプロジェクトにアーティファクトが入ってくるので、後はmavenプロジェクトをコミットしてプッシュするだけだ。以下の画面はコミット&プッシュ後のものだ。