MavenCentralRepositoryへの登録
2021.11.29 サーバが変わっていたので差分を追記
Motivation
せっかくライブラリを作ったのでどこからでも使えるように登録してみようと思いました。
手順
- 事前準備
- Javadocとソースの生成
- 公開鍵の登録
- 署名
- 登録
- チケットの作成
- デプロイ
- リリース
- チケットクローズ
- 2時間待つ
1. 事前準備
1.1. Javadocとソースの作成
ビルド時にJavadocとソースが生成されるようにします。
<build>
...略...
<!-- generate source -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.4</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
<!-- generate javadoc -->
<plugin>
<groupId>org.apache.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.10.1</version>
<configuration>
<show>package</show>
<source>1.7</source>
<encoding>UTF-8</encoding>
<docencoding>UTF-8</docencoding>
<charset>UTF-8</charset>
<links>
<link>http://docs.oracle.com/javase/7/docs/api/</link>
</links>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
...略...
</build>
Javadocコメントについて
- がんばって英語で書きます
- Java標準ライブラリのJavadocが参考になります
- 文法はGinger(http://www.getginger.jp/)でチェックできます
1.2. 公開鍵の登録
1.2.1. 公開鍵の生成
gpgを使って生成していきます。
gpg --gen-key
| 項目 | 設定値 |
|---------------+---------------|
| 鍵の種類 | RSA and DSA |
| 鍵の長さ | 2048 |
| 有効期限 | 期限なし |
| Real name | Tamura Shingo |
| Email address | (略) |
| Comment | なし |
1.2.2. 公開鍵サーバへの登録
gpgから直接登録する方法と、Web画面経由で登録する方法があります。
直接登録編
gpg --key-server hkp://gpg.mit.edu --send-keys XXXXX
ブラウザ経由での登録編
gpg -a --export XXXX
出力結果を http://pgp.mit.edu に貼り付け
こんな感じで登録されます。
1.3. 署名
普通にpom.xmlに書くと、Travis CI等で実行する際に鍵がないよ!といってエラーになるので、特殊なオプションを与えたときだけ署名するようにします。
<profiles>
<profile>
<id>release-sign-artifacts</id>
<!-- for release -->
<!-- mvn -DperformRelease=true deploy -->
<activation>
<property>
<name>performRelease</name>
<value>true</value>
</property>
</activation>
<build>
<plugins>
<!-- generate PGP Signature -->
<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>
<configuration>
<keyname>${gpg.keyname}</keyname>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
2. 登録
2.1. チケットの作成
2.1.1. JIRAアカウントの作成
まず、JIRAアカウントを作成します。
https://issues.sonatype.org/secure/Signup!default.jspa
に行って申請フォームを埋めます
Full Nameは自分の名前、Usernameは希望するアカウントです。
Usernameに空白を入れるとその後のスクリプトが動かないようなので、空白を入れないようにしましょう。
(一回やってしまいました・・・・)
2.1.2. プロジェクトチケットの作成
https://issues.sonatype.org/secure/CreateIssue.jspa?issuetype=21&pid=10134
に行ってチケットを発行します。
実際に発行したチケットです。
https://issues.sonatype.org/browse/OSSRH-12241
| 項目 | 記入した値 | 備考 |
|--------------------------+----------------------------------------------+---------------------------------------|
| Summary | dbutils3 | ライブラリの名前 |
| Description | 略 | README.mdに書いた内容を1行で |
| Group Id | com.github.tamurashingo | GitHub上に置いたので |
| Project URL | https://github.com/tamurashingo/dbutils3 | README.mdでそれらしく見えるから大丈夫 |
| SCM url | https://github.com/tamurashingo/dbutils3.git | |
| Username(s) | なし | 共同コミッターみたいな人がいれば書く |
| Alredy Synced to Central | No | 初回登録なので |
※ 2021.11.29追記
Group Id
に com.github.ユーザ名
は現在は使えないようです。 io.github.ユーザ名
を使ってくれ、とのことです。
io.github.ユーザ名
で登録しようとすると、「githubリポジトリの所有者を確認したいから、xxxxxxというリポジトリを作ってくれ」という旨の自動コメントが出ます。
言われたとおりにリポジトリを作って一言コメントを返すと、自動で確認が入り、次に進むことができます。
↑ こんなコメントでも大丈夫でした
2.1.3 settings.xml の編集 ※2021.11.29追記
~/.m2/settings.xml
に先程作ったJIRAのアカウントとパスワードを記入します。
この情報を使って maven
は認証します。
id
は後述するリポジトリと同じにします。
<settings>
<servers>
<server>
<id>ossrh</id>
<username>ユーザid</username>
<password>パスワード</password>
</server>
</servers>
</settings>
2.2. デプロイ
リポジトリが作成されたらメールが来ます。そうするとデプロイが可能になります。デプロイ先をpom.xmlに追加します。
<distributionManagement>
<repository>
<id>sonatype-nexus-staging</id>
<name>Nexus Release Repository</name>
<url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
</repository>
</distributionManagement>
※2021.11.29追記
アップロード先のサーバが変わりました。
<distributionManagement>
<snapshotRepository>
<id>ossrh</id>
<url>https://s01.oss.sonatype.org/content/repositories/snapshots</url>
</snapshotRepository>
<repository>
<id>ossrh</id>
<url>https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/</url>
</repository>
</distributionManagement>
おもむろにデプロイをします。
mvn -DperformRelease=true deploy
たまーに調子が悪く、アップロードに失敗するときがありますが、やり直せば大丈夫です。
※2021.11.29追記
以下のコマンドで表示されるsignatureを gpg.keyname という名前で明示的に指定しています。
gpg --list-signatures --keyid--format 0xshort
実際に与えたコマンドはこうです。
mvn -DperformRelease=true -Dgpg.keyname=0x0EDAC573 deploy
2.3. リリース
デプロイが完了したらWeb画面からリリース作業を行います。
2.3.1. ログイン
に行き、右上の Log In を押します。
ID/PasswordはJIRAのものと同じです。
※ 2021.11.29追記
新しい方のは https://s01.oss.sonatype.org/
2.3.2. リポジトリ検索
左側メニューの Build Promotion から Staging Repositories を選択します。右側の画面に自分のリポジトリが出るのでそれを選択します。
2.3.3. クローズ処理
Close ボタンを押します
2.3.4. リリース処理
Release ボタンが押せるようになるので、Release ボタンを押します。
デプロイ時のアップロードに失敗したりすると、失敗したリポジトリが残っていたりするため Relase ボタンが押せなかったりします。そういう時は失敗したリポジトリを選択して Drop を押し、不要なリポジトリを削除します。そうすると Release が押せるようになります。
2.4. チケットクローズ
JIRAのコメントにリリースした旨を記載します。そうするとJIRAがクローズされます。
2.5. 2時間待つ
2時間ほど待つと Central Repository と同期が取れるようなので、
http://search.maven.org/
に行って検索してみます。
こういう感じで登録されます。
※ 2021.11.29追記
リポジトリへの反映はほぼすぐ、Searchへの反映は18時間かかりました。
参考
OSSRH Guide
http://central.sonatype.org/pages/ossrh-guide.html
公式ガイドです
The Central Repository Documentation
Getting started
https://central.sonatype.org/publish/publish-guide/
【最新版】Maven Central Repository へのライブラリ登録方法 #maven
http://samuraism.jp/diary/2012/05/03/1336047480000.html
https://yusuke.blog/2012/05/03/689
URLのリンクが切れているものがありますが、基本的にこの方法でいけました
DBUtils3
https://github.com/tamurashingo/dbutils3
自作のライブラリです。DropWizardでJDBIするときに使っています。