どうもこんばんわ。
保健室のセンセーとゴスロリの校医 攻略しました。前作はやってないです。
ロープライスだけどシナリオがちゃんとしていていいと思いました。おすすめ
みんなかわいい
鈴ルートも近々発売みたいなので楽しみですね。くー
本題
ちょっと前に書いたアプリのコア部分をライブラリに切り出した。
ライブラリを作ったのでせっかくなら公開しようというわけで、
Maven Central
へ公開し、他の人から使えるようにしてみます!
環境
- リポジトリ
- build.gradle.kts を使います
- Windows 10 Pro
用語集
なんだかよく分からん名前ばっか出るのでまとめます。
それぞれの立ち位置を理解するのでお腹いっぱいになりそう。
- Sonatype Jira
- ライブラリをアップロードするリポジトリを作成するため使う
- 多分リポジトリ管理してる中の人とやり取りするのに使う
- Jira チケットを切って担当者にお願いする
- チケットを切るには Jira アカウントも作らないといけない
- Sonatype OSSRH
- Sonatype OpenSourceSoftware Repository Hosting の略らしい
- まずはここにライブラリをアップロードする
- MavenCentral
- Sonatype OSSRH へアップロードしたライブラリが問題なければ MavenCentral へ公開する。
- よく分からん
流れ
- Sonatype (Atlassian) Jira のアカウントを作る
- リポジトリの作成をお願いするJiraチケットを切る
- グループID(ドメイン、GitHub Pages)のどれかを利用する
- 署名に使うGPG鍵を作成する
- Gradleを書く
- リリースする
- Sonatypeの管理画面からMavenCentralに公開する
- おわり
なげえよ...
公式
https://central.sonatype.org/publish/publish-guide/
使うライブラリ
あり座椅子
https://github.com/gradle-nexus/publish-plugin
https://github.com/Kotlin/dokka
(Dokkaでjavadoc.jar 生成 : https://kotlinlang.org/docs/dokka-gradle.html#build-javadoc-jar)
参考にしました、ありがとうございます!
https://getstream.io/blog/publishing-libraries-to-mavencentral-2021/
http://yuki312.blogspot.com/2021/08/maven-central-repository.html
Sonatype Atlassian Jira アカウントの作成
ここから作れます。
https://issues.sonatype.org/secure/Signup!default.jspa
Full name は適当でいいんじゃね、バカ正直にかく必要はなさそう雰囲気(知らんけどあとから変更できる)。
Usernameは変更できない上に管理画面へログインする際も使われるのでよく考えたほうが良さそう
https://central.sonatype.org/publish/manage-user/#change-my-full-name-e-mail-address-or-password
パスワードの条件難しくて草。最後の記号とかどうやって出すんだよ
You must specify a password that satisfies the password policy.
The password must contain at least 1 special character, such as &, %, ™, or É.
出来たらこうなる。作ったアカウントでログインして、適当に初期設定を進めます。
Atlassian Jira 自体には日本語があります。なお日本語で対応してくれるとは言っていない。
リポジトリを作ってもらうJiraチケットを切る
作成からチケットを切れます。
プロジェクト、課題タイプ はそのままでおっけー
そして以下の項目を埋めていきます。
Group Idってのはio.github.takusan23
みたいなやつです。
自分で持ってるドメインとか使えるみたいですが、今回はGitHub Pagesのドメインを使います。
よくライブラリ導入時にドメインが逆になった文字列を入れると思うのですが、それです。
implementation("io.github.takusan23:conecocore:1.0.0")
← この io.github.takusan23
がグループID
なまえ | 書くこと | 例 |
---|
要約 | リポジトリを作って欲しいよ~的な | Create repository for io.github.takusan23 |
説明 | ライブラリ作ったからMavenCentralで公開したいんだ!~的な | I created an Android library that connects multiple videos. I would like to publish it using Maven Central. |
Group Id | グループID、GitHub Pagesのドメインとか | io.github.takusan23 |
Project URL | GitHubのリポジトリへのURL | https://github.com/takusan23/Coneco |
SCM url | Project URLで書いたURLに.git をつければ良さそう | https://github.com/takusan23/Coneco.git |
Already Synced to Central | 初めてならNoで良いと思う | No |
以下例です。
作成を押すと、こんな風になるのでチケットの詳細ページへ飛びましょう。
数十秒待っていると...
チケットへコメントが付きます。(Botなんですけどね初見さん)
ここでグループIDの検証を行います、が特に難しいことをするわけでもなく、
自分のGitHubのリポジトリに作ったJiraチケットのチケット番号(OSSRH- から始まるやつ)の名前でリポジトリを作成しろって内容です。
というわけで作成して
チケットのコメントに作ったことを知らせます。
Created repository for https://github.com/takusan23/OSSRH-79851
チケットをOpenにしろって言われてるんだけど勝手にOpenになってた
数分後に...
MavenCentralでio.github.takusan23
が使えるようになったぞ!ってメールが来ました。歯磨き終わったら仕事終わってた。有能かよ
これで、https://s01.oss.sonatype.org/ にログインできるようになります。
ログインはここです。
Username、パスワードはさっきのJiraアカウントと同じものを使えばOKです。
署名で使う鍵を作成する
公式:https://central.sonatype.org/publish/requirements/gpg/
私は Windowsユーザー なので Gpg4win を入れます。
https://gpg4win.org/index.html
インストーラーの案内に従って入れましょう。
インストールしたら開きます。GUIが付属してますので使っていきましょう。
署名の中身
詳細設定は、詳細設定
を押すと開きます。
なまえ | あたい |
---|
名前 | 各自の名前 |
メールアドレス | 各自のメールアドレス |
鍵の要素 | RSA +RSA (4096 ビット) |
証明書の利用目的 | 署名 (有効期限決めることも可能、今回はしない) |
Protect the generated key with a passphrase | チェックを入れる |
パスワードを入力します。
できました。
バックアップと失効証明書の作成
一応作成します。
バックアップはキーを右クリックしてコンテキストメニューを出し、Backup Secret Keys...
で出来ます。
失効証明書を作っておくと、万が一秘密鍵が漏れた場合に無効にできます。
コンテキストメニューを開き、詳細
を押します。
そしたらGenerate revocation certificate
を押すことで発行できます。
公開鍵を鍵サーバーへアップロードする
GUIでやる方法がわからんかったので、コマンドプロンプトでやります。
コマンドプロンプト、PowerShell等を起動して、まず鍵一覧を出します
gpg --list-keys
そしたら長い16進数があると思うので、この16進数の最後から8文字分をコピーしておきます。
次に、以下のコマンドを叩いてアップロードします。
署名鍵をBase64にする
最後にライブラリの署名で使うので、秘密鍵をBase64で書き出しておきます。
秘密鍵なので扱いには十分気をつけてね!!!!
macOS
とかだとワンライナーみたいなんですが、Windowsの場合はちょっとめんどいですね...
適当なフォルダを作りその中で、PowerShellなどを起動して...
export_secret_base64
ファイルができていれば成功です。Base64なファイルは文字なのでテキストエディタで開けます。
最初の-----BEGIN CERTIFICATE-----
と最後の-----END CERTIFICATE-----
を消して、改行も消します
いよいよライブラリを公開するためのGradleタスクを書いていく...
2023/02/19 めっちゃ間違えてました。すいませn。ソースとjavadocが入るように修正しました。
2024/03/29 Android Gradle Plugin の更新でまた動かなくなってました。不要な箇所があるので追記読んでください。
ルート (.idea がある場所) の build.gradle.kts
まずルートにある build.gradle.kts へ書き足します。
kts
で書いた場合、別ファイルにスクリプトを書いてapply from
する方法が使えないみたいなので、直接書くしかないです。
(参考にした記事では別スクリプトに分けてた、あれ?ktsに移行するメリットマジでなくない...)
https://github.com/gradle/kotlin-dsl-samples/issues/1287
ライブラリの方の build.gradle.kts
こっちも同様直接書くしかないです。
ライブラリ名
、ライブラリの説明
の部分や、
作者とかライセンスとかが書いてある下の部分は各自書き換えてください。
なまえ | せつめい |
---|
groupId | Sonatype OSSRH のJiraチケットで決めたのと同じグループID |
artifactId | ライブラリ名とも言う |
version | バージョン |
追記 Android Gradle Plugin 最新バージョン追従
なんか見ないうちに、公式ドキュメントに、ライブラリの作り方が言及されるようになってる。
変更点ですが、
Android Gradle Plugin
が元のソースコードを同梱するようになったので、自分でtask
を書かなくて良い
withSourcesJar()
、withJavadocJar()
を使えばいい(いつから追加されたのこれ???)
- 同様に、
Javadoc
もAGP
が勝手に生成して同梱するようになったので、自分でdokka
をセットアップする必要はなくなった
- それに伴い、
build.gradle
に書いている記述も修正が必要
まずは、ルートのbuild.gradle.kts
からdokka
は不要なので消しちゃって
そして、ライブラリの方のbuild.gradle.kts
を以下のように書き直します。
namespace
とかは各自違うと思う。コメントは不要なので消していいよ
変更点ですが、
android { }
の中にpublishing { }
を追加した
- ソースコードとドキュメント生成の
task
を消した、artifacts { }
も消した、
afterEvaluate { }
にfrom
だけ移動。
- 多分
from
でソースとjavadoc
が入るので、artifact()
は書かなくていい
signing { }
を一番最後に
全部の差分はこちらから
https://github.com/takusan23/AkariDroid/commit/54e1dd4329569bda09bacdd090b34e78a65ab892
local.properties に認証情報を書き込む
このファイルはgitの管理下にしてはいけません。絶対人には見せちゃだめですよ。
なんか書いてあるかもだけどその下にかけばいいです。
追記 ユーザーネーム、パスワードでログインできなくなった
こちらを参考に、ユーザートークンなるもの作ってください。
https://takusan.negitoro.dev/posts/maven_central_ossrh_upload_401_error/
ステージングプロファイルId どこやねん
Sonatype OSSRH の nexus repository manager へログインします。
https://s01.oss.sonatype.org
そしたら、左側にある中から、Staging Profiles
を押して、自分の名前の部分を押します。
押したら、ブラウザのアドレス欄を見ます。stagingProfiles;
のあとの16進数がステージングプロファイルId
になります。
公開するぞ!!!!
といっても直接MavenCentral
に公開されるわけではなく、一旦Sonatype OSSRH
のnexus repository manager
へアップロードされます。
その後問題がなければ公開という流れになります。
Android Studioの右側にあるGradle
を押してぞうさんのマーク🐘を押して、以下のコマンドを叩きます。
参考にした記事とコマンドが変わってますね。
https://github.com/gradle-nexus/publish-plugin
gradle :ライブラリ名(モジュール名):publishToSonatype
数十秒後に終了しました。
プラグイン作ったやつすげえ!
Sonatype OSSRH nexus repository manager の ステージングリポジトリを見に行く
またさっきのリポジトリのURL https://s01.oss.sonatype.org/ を開いて、Staging Repositories
を押します。
押したら、Refresh
を押して最新の状態にしましょう。
どうですか?ありましたか!?
問題がなければCloseを、やり直したい場合はDropで消せます。
Close を押す
Close
を押すと、MavenCentralへ公開する?準備が始まります。
自動で公開されるわけではないので、まだ安心できますね。
しばらく待っているとReleaseが押せるようになっていました。
いくぞおおおおお、新曲!
Confirm
を押してリリースです!
数時間後に https://repo1.maven.org/maven2/ から見れるようになるみたいなので楽しみですね。
公開されたか見る
https://repo1.maven.org/maven2/ を開いて辿っていけばいいです。
あった!!!
search.maven.org でも確認する
さらに待ってると、 https://search.maven.org で検索出来るようになってます。
うおおおお、なんかすごい
ライブラリの詳細画面はこんな感じ、導入方法とか書いてある。
使う側になる
プロジェクトレベル(appフォルダ内)のbuild.gradle
に書き足すと追加できます。やったぜ
implementation '<グループId>:<ライブラリ名(アーティファクトId)>:<バージョン>'
今回作ったライブラリだとこうですね。
これで他の大手ライブラリのように導入できます。くっそ大変だなこれ...
(なんか別にドキュメントを生成しないとダメみたいですね...)
ライブラリを入れた際に一緒にXXX-sources.jar
がダウンロードされるので、IDE上でもそのまま表示されるようになります。
他にライブラリを公開したい場合
すでにリポジトリがある(Sonatype OSSRH nexus repository manager が使える)ので、build.gradle.kts
のところからやればいいと思います。
ソースコード
どうぞ
https://github.com/takusan23/Coneco
https://github.com/takusan23/AkariDroid
おわりに
4月も終わりますね...