Javaのunitテストでredis clusterを使いたかったのでredis-unitを作りました。

https://github.com/ishiis/redis-unit

Maven Central Repositoryに登録したのでその手順を簡単にメモしておきます。

以下のドキュメントを参考にすることでMaven Centralにパッケージを公開することができます。

http://central.sonatype.org/pages/ossrh-guide.html#deployment

初期設定

JIRAアカウントを作る

以下のJIRAでやり取りをする必要があるのでまずアカウントを作ります。

https://issues.sonatype.org/secure/Signup!default.jspa

新しいプロジェクトのチケットを作る

手順のリンクが切れているので他のプロジェクトを参考にチケットを作ります。
他のプロジェクトを参考に記述すると早いです。自分の場合は以下の様に作成しました。

https://issues.sonatype.org/browse/OSSRH-26738

2営業日以内に対応してくれるらしいです。営業日がいつなのかはわからないですが、自分の場合2分くらいでコメントが来ました。ここではドメイン(ネームスペース)のレビューがされているようです。
自分のドメインがない場合はcom.github.ishiisの様にgithubのアカウントを使えば良いみたいです。

pomの設定

次は作ったパッケージをアップロードするための準備をします。アップロードした後にパッケージが要件にあっているかチェックされてOKならMavenRepositoryに登録されるっぽいです。

レビューされる要件はこのページに記載されています。

必要な情報を記述して行きます。ここではmavenを使うのでpom.xmlにプロジェクトの情報を記述します。gradleとかantとかsbtを使っている場合は読み替える必要があります。

Javadocとソースの公開

Javadocとソースの公開はMavenのプラグインを使って設定すると自動的に公開されるようになるので気にしなくてOKです。

GPG/PGPでファイルに署名する

ここも以下の手順で設定するので気にしなくてOKです。

メタデータの記述

pom.xmlにプロジェクトの詳細を書きます。

groupId / artifactId / versionを書きます。
チケットで申請したgroupId以下に作成します。

<groupId>net.ishiis.redis</groupId>
<artifactId>redis-unit</artifactId>
<packaging>jar</packaging>
<version>1.0.3</version>

versionはセマンティックバージョニングを薦めているようです。
packagingはjarではない場合は指定が必要です。デフォルトはjarが適用されます。

name / description / urlを書きます。
特に説明することはないですが、name / description / urlを記述します。

<name>redis-unit</name>
<url>https://github.com/ishiis/redis-unit</url>
<description>Redis instance for unit testing applications.</description>

licenseを記述します。

<licenses>
<license>
<name>The Apache License, Version 2.0</name>
<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
<distribution>repo</distribution>
</license>
</licenses>

developerの詳細を書きます。自分の場合はnameとemailだけ記述しました。organizationを書く場合は次のように書けばOKです。

<developers>
<developer>
<name>Manfred Moser</name>
<email>manfred@sonatype.com</email>
<organization>Sonatype</organization>
<organizationUrl>http://www.sonatype.com</organizationUrl>
</developer>
</developers>

ソース管理システムの情報を記述します。githubを使っている場合は次のように記述すればOKです。

<scm>
<url>https://github.com/ishiis/redis-unit</url>
<connection>scm:git:git@github.com:ishiis/redis-unit.git</connection>
<developerConnection>scm:git:git@github.com:ishiis/redis-unit.git</developerConnection>
</scm>

デプロイ

  • Apache Maven
  • Apache Ant
  • Gradle
  • sbt

のドキュメントが用意されています。ここではApache Mavenを使います。
細かいところですが、1GB以上のパッケージをアップロードする場合は問い合わせが必要らしいです。

以下の手順に従って設定します。
http://central.sonatype.org/pages/apache-maven.html

sonatypeがnexusのプラグインnexus-staging-maven-pluginを用意しているのでこれを使ってデプロイします。手順通りに設定すると認証とかJavadocとかソースのデプロイとか署名とか必要な手順を全てしてくれます。

snapshot用のレポジトリとstagingレポジトリを記述して、パッケージ公開のためのプラグインを記述します。ここらへんはドキュメントからコピペして設定します。

  • nexus-staging-maven-plugin
  • maven-source-plugin
  • maven-javadoc-plugin
  • maven-gpg-plugin

設定例は次のとおりです。上の4つのプラグイン部分は特に書き換えることなくコピペしました。maven-compiler-pluginは自分の環境に合わせて設定してください。

<project>
...
<distributionManagement>
<snapshotRepository>
<id>ossrh</id>
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
</snapshotRepository>
<repository>
<id>ossrh</id>
<url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
</repository>
</distributionManagement>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.6.0</version>
<configuration>
<compilerVersion>${java.version}</compilerVersion>
<source>${java.version}</source>
<target>${java.version}</target>
</configuration>
</plugin>
<plugin>
<groupId>org.sonatype.plugins</groupId>
<artifactId>nexus-staging-maven-plugin</artifactId>
<version>1.6.7</version>
<extensions>true</extensions>
<configuration>
<serverId>ossrh</serverId>
<nexusUrl>https://oss.sonatype.org/</nexusUrl>
<autoReleaseAfterClose>true</autoReleaseAfterClose>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.2.1</version>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.9.1</version>
<executions>
<execution>
<id>attach-javadocs</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-gpg-plugin</artifactId>
<version>1.5</version>
<executions>
<execution>
<id>sign-artifacts</id>
<phase>verify</phase>
<goals>
<goal>sign</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

パッケージの署名

デプロイするときはパッケージに署名する必要があるのでキーペアを作成します。作成したキーペアの公開鍵をキーサーバに登録します。

CentOS7の場合は既にgpg2コマンドがインストールされているので鍵を生成し、キーサーバに鍵を送信します。
鍵に設定したパスワードは後で使うので覚えておいてください。

gpg2 --gen-key
全てデフォルトで要求されたものを入力すればOK。

gpg2 --list-keys
pub 2048R/XXXXXXXX 2016-12-21

gpg2 --keyserver hkp://pool.sks-keyservers.net --send-keys XXXXXXXX

ユーザ情報の設定

デプロイ時に使用するユーザ情報を~/.m2/settings.xmlに記述します。

<settings>
<servers>
<server>
<id>ossrh</id>
<username>your-jira-id</username>
<password>your-jira-pwd</password>
</server>
</servers>
<profiles>
<profile>
<id>ossrh</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<gpg.executable>gpg2</gpg.executable>
<gpg.passphrase>YOUR_PASSWORD</gpg.passphrase>
</properties>
</profile>
</profiles>
</settings>

デプロイ

デプロイは1コマンドで実行できます。

./mvnw clean deploy

初回デプロイが終わったら、チケットにデプロイしたことを記述する必要があるので忘れずに。

以降はデプロイするとレポジトリ側のバッチでMavenCentralに同期されて利用可能になりますが、MavenCentralの検索結果にはすぐに反映されないので注意が必要です。検索indexがrefreshされないとアップロードしたパッケージが検索に出てこないです。すぐに確認したいときはバージョンを含んで検索する必要があります。indexがいつ更新されるのかはわかりませんが、以下のページでindexの更新が行われたかどうかは確認できるので気長に待てば良いと思います。
http://search.maven.org/#stats

おわり。

参考

  1. http://central.sonatype.org/pages/ossrh-guide.html#deployment