GitLab/GitHubでプライベートなMavenリポジトリを作成する



前提:パブリックなMavenリポジトリを作成する方法

公開するライブラリのMavenリポジトリを作る方法は以前に書いた。

これはGitHub PagesやGitLab Pagesでも同じような手順だ。単純にMavenのリポジトリデータ構造を作成してそれを公開してやればよい。

プライベートなMavenリポジトリは?

ところで、GitLabでは無料でもプライベートリポジトリが作成できるのだが、Pagesの方は常に公開になってしまうようだ(2019/6現在)。オープンソースの「GitLab」にはアクセスコントロールの方法があるようだが、GitLab.comではまだ使えないらしい。

したがって、GitLabでも「できあいの」プライベートなMavenリポジトリは作成できない。

これについて以下を説明してくれている方がいた。もちろん、「GitHubのPrivateリポジトリ」ということはGitHubの有料ユーザのみになる。

より簡単な方法

しかし上記の方法では、gradleプラグインを入れたり、SSHキーを作成するなど面倒なことおびただしい。実はもっと簡単な方法があったのである。

条件としては、

  • チームメンバー全員がそのMavenリポジトリへの(少なくとも)読みこみ権限を与えられている

のだから、単純にローカルなリポジトリをPullで最新状態にし、それをMavenリポジトリとすれば良いのである。

ここでは、GitLabのmaven_repositoryと名付けられたプロジェクトへの読み書き権限があるとすると、以下を行えばよい。

  • ローカルにこのリポジトリをクローンする。C:\maven_repositoryとでもする。
  • アーティファクトを作成したらここに書き込む。Gradleでは例えば以下になる。
publishing {
  publications {
    target(MavenPublication) {
      groupId  'groupId'
      artifactId 'artifactId'
      version '1.0'    
      from components.java   
      artifact sourceJar
    }
  }  
  repositories {
    maven {
      url 'file:///C:/maven_repository'       
    }
  }
}
  • GitLabにPushする
  • 他のチームメンバーが書き込んだときのために定期的にPullする。
  • ライブラリを参照したいところでは以下のように書く
repositories {
  jcenter(); // 一般的なライブラリ
  maven {
    url 'file:///C:/maven_repository'
  }
}

もしPullするのを忘れても、その時にはライブラリが引っ張ってこれないので、すぐに気がつくはずだ。

まとめ

プライベートなリポジトリに対してチーム全員が少なくとも読み込み権限のある場合は、特に「ネット上のMavenリポジトリ」を作成する必要は無い。ローカルなファイルシステム上のリポジトリで十分だ。