Github上に私設Mavenリポジトリをつくる
Mavenは依存性解決やビルド/デプロイ処理のためのツールとして非常に便利なのですが、個人的に作成した各種ライブラリやツールを配布するには、通常中央のリポジトリにものを登録する必要があります。そして中央リポジトリに登録するには、いろいろ準備がいります。
それはまあしかたがないことなのですが、ちょっとしたツールでそうした準備をするのは面倒だという場合には、Github上にリポジトリを私設することもできます。使用するのはGithubから公開されているGithub Maven Pluginsというプラグイン・コレクションです。
こちらのポストで紹介されているものですが、今(2015/06/06)現在サンプルコードの大事なところがすべて読めない状態になってしまっています。さいわいこのポスト自体、stackoverflow.comのこのポストの翻訳なのでそちらを参照しました。
これを読んでつくったプロジェクトのリポジトリはこちらです。ブランチmvn-repoがMavenリポジトリ用ブランチとして作成されています。
Mavenリポジトリをつくる
Githubにリポジトリを作成
何はともあれGithubにリポジトリを作成します。そこからクローンして、ローカル・リポジトリを作成し、そこにMavenのプロジェクトを作成します。
以降の説明の前提となる各種サンプル情報を示します:
settings.xml
の変更
まずはsettings.xml
を変更します。配置場所は.m2/settings.xml
や(mavenのアーカイブ解凍先)/conf/settings.xml
といろいろだとは思います。
servers
タグの子要素を追加します:
<servers> ... <server> <id>github</id> <username>mizukyf</username> <password>foobar</password> </server> </servers>
id
は任意の値を使用してよいようです。後ほどMavenプロジェクトのpom.xml
でこのサーバ情報を参照するためのキーです。username
とpassword
は言わずもがなですが、Githubの個人ユーザのID・パスワードです。
pom.xml
の変更
先ほど作成したMavenプロジェクトのpom.xml
にいくつかの変更を加えます。
まずはproject
タグ(つまりpom.xml
のドキュメント構造のルートですが)の子要素として、github.global.server
というキーでプロパティを定義します。このプロパティの値は先ほどsettings.xml
で定義したサーバ情報を参照するものです:
<properties> <github.global.server>github</github.global.server> </properties>
次に同じproject
タグの子要素として、内部リポジトリの情報を追加します。これはとくにこだわりのない限り固定文言でよいでしょう:
<distributionManagement> <repository> <id>internal.repo</id> <name>Temporary Staging Repository</name> <url>file://${project.build.directory}/mvn-repo</url> </repository> </distributionManagement>
続いて、plugins
タグの子要素としてプラグインとその設定情報を追加します。これは最前追加した内部リポジトリをデプロイ(deploy
ゴール)の向き先として指定するものです。これも先ほどと同様にふつうは上固定文言になるでしょう(先ほど内部リポジトリのパスの/mvn-repo
を別のものに変更している場合はここでも同じように変更が必要です):
<plugin> <artifactId>maven-deploy-plugin</artifactId> <version>2.8.1</version> <configuration> <altDeploymentRepository>internal.repo::default::file://${project.build.directory}/mvn-repo</altDeploymentRepository> </configuration> </plugin>
さらに、同じくplugins
タグの子要素として、site-maven-plugin
の設定を追加します。
このなかでbranch
タグにはMavenリポジトリとして利用するGitブランチを指定します。私の場合はここもstackoverflow.comのポストにあるままを指定しました。
repositoryName
とrepositoryOwner
は当然ながらプロジェクトごと、開発者個人ごとに異なってきます。以下の例ではsettings.xml
のセクションで提示したサンプル値を指定しています:
<plugin> <groupId>com.github.github</groupId> <artifactId>site-maven-plugin</artifactId> <version>0.12</version> <configuration> <message>Maven artifacts for ${project.version}</message> <!-- git commit message --> <noJekyll>true</noJekyll> <!-- disable webpage processing --> <outputDirectory>${project.build.directory}/mvn-repo</outputDirectory> <!-- matches distribution management repository url above --> <branch>refs/heads/mvn-repo</branch> <!-- remote branch name --> <includes> <include>**/*</include> </includes> <repositoryName>mvnrepo.on.github</repositoryName> <!-- github repo name --> <repositoryOwner>mizukyf</repositoryOwner> <!-- github username --> </configuration> <executions> <execution> <goals> <goal>site</goal> </goals> <phase>deploy</phase> </execution> </executions> </plugin>
これでmvn clrean deploy
コマンドを実行すると、ビルドが行われた後、Github上のリポジトリにリポジトリが自動で作成され、そこに成果物がアップロードされます。
Github上の私設リポジトリを参照する
上記の手順でGithub上に私設のMavenリポジトリが作成されました。今度はこのリポジトリ上のMavenプロジェクトに依存するMavenプロジェクトに設定を施します。まずリポジトリ上のMavenプロジェクトに依存するプロジェクトのpom.xml
を変更します。
まずはporojectタグの子要素としてリポジトリ情報を追加します:
<repositories> <repository> <id>mvnrepo.on.github</id> <url>https://raw.github.com/mizukyf/mvnrepo.on.github/mvn-repo/</url> <snapshots> <enabled>true</enabled> <updatePolicy>always</updatePolicy> </snapshots> </repository> </repositories>
ここでurlタグに指定するのはhttps://raw.github.com/(Gitユーザ名)/(Gitリポジトリ名)/(Mavenリポジトリ用ブランチ名)/
という形式のURLです。
続いてdependencies
タグの子要素として依存性情報を追加します:
<dependency> <groupId>org.doogwood</groupId> <artifactId>mvnrepo.on.github</artifactId> <version>0.0.3-SNAPSHOT</version> </dependency>
もちろんgroupId
とartifactId
、version
には、先ほどの手順でMavenリポジトリを作成したプロジェクトの情報を設定します。