githubにmaven repositoryを作成して自作ライブラリを登録する
はじめに
Mavenのライブラリは基本的にはCentral Repositoryに登録されていますが、手続きも面倒そうだったりするのでもっと手軽に公開サーバに登録したいということでやってみました。
このあたりを参考にしました。
http://blog.lampetty.net/blog_ja/index.php/archives/527
この中ではGitHub Maven Pluginsを使ってます。
https://github.com/github/maven-plugins
githubにはGitHub Pagesというのがあって通常のWebサイトのように使うことが出来ます。この機能を利用します。
上の参考リンクからちょっと変えた点
シンプルな方法
GitHub Maven Pluginsを使わずに、distributionManagementのurlを任意のディレクトリにしてmvn deployすればjar等々が作成される。それをGitHubのMaven用リポジトリと同期させればOK
基本的にはこれだけでいいはず。
<properties> <internal.repo.directory>C:\mvn-repo</internal.repo.directory> </properties> <distributionManagement> <repository> <id>internal.repo</id> <name>Temporary Staging Repository</name> <url>file://${internal.repo.directory}</url> </repository> </distributionManagement>
これでC:\mvn-repoディレクトリでgit initしてgit remote addでGitHubと同期できるはず。
gh-pagesブランチにpushすればGitHub Pagesで公開される。
これで公開したライブラリを依存関係に含めたい場合はdependencyの登録の前にリポジトリ追加を行う。
<repository> <id>kamegu-github</id> <url>http://kamegu.github.io/mvn-repo/</url> </repository>
これは下記のようなraw.github.comを使用するよりシンプルかと思います。
<repository> <id>kamegu-github</id> <url>https://raw.github.com/kamegu/mvn-repo/master/</url> </repository>
source-jarもつくるなら、maven-source-pluginを使用する。
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-source-plugin</artifactId> <version>2.2.1</version> <executions> <execution> <phase>package</phase> <goals> <goal>jar</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
GitHub Maven Pluginを使用する
上の参考リンクのようdistributionManagementをbuild.directory内にするとmvn cleanしたときに消えてしまいます。
そうすると、GitHubへpushした際に古いバージョンのjarファイルが消えてしまっていました。
それじゃダメだと思ってたんですが、Pluginにmergeオプションが設定できるようで、これをtrueにすれば解決できるようです。
なので、pom.xmlを最終的にこのようにしました。
これとは別にsettings.xmlも設定しています。
<properties> <github.global.server>github-kamegu</github.global.server> </properties>
<distributionManagement> <repository>1 <id>internal.repo</id> <name>Temporary Staging Repository</name> <url>file://${project.build.directory}/mvn-repo</url> </repository> </distributionManagement>
<build> <plugins> <plugin> <groupId>com.github.github</groupId> <artifactId>site-maven-plugin</artifactId> <version>0.9</version> <configuration> <merge>true</merge> <message>Maven artifacts for ${project.version}</message> <!-- Jekyllという静的ページを生成するツールは無効 --> <noJekyll>true</noJekyll> <outputDirectory>${project.build.directory}/mvn-repo</outputDirectory> <includes> <include>**/*</include> </includes> <!-- GitHubリポジトリ名 --> <repositoryName>mvn-repo</repositoryName> <!-- GitHubユーザ名 --> <repositoryOwner>kamegu</repositoryOwner> </configuration> <executions> <!-- run site-maven-plugin's 'site' target as part of the build's normal 'deploy' phase --> <execution> <goals> <goal>site</goal> </goals> <phase>deploy</phase> </execution> </executions> </plugin> </plugins> </build>
以上