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サイトのように使うことが出来ます。この機能を利用します。

上の参考リンクからちょっと変えた点

  • distributionManagementをbuild.directory内にするとmvn cleanしたときに消えて、それをpushすると古いバージョンのjarが個人用公開リポジトリからも削除される
  • GitHub Pagesを使うように変更
  • source-jarを作るように変更

シンプルな方法

GitHub Maven Pluginsを使わずに、distributionManagementのurlを任意のディレクトリにしてmvn deployすればjar等々が作成される。それをGitHubMavenリポジトリと同期させれば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>

以上