S-JIS[2023-06-19/2023-10-01] 変更履歴

Gradle signingプラグイン

Gradleのsigningプラグインは、生成するjarファイル類の電子署名を行う。


概要

signingプラグインは、生成するjarファイル類の電子署名を行う。

なお、電子署名を作成する為に、GnuPGを使って鍵を作っておく必要がある。

build.gradle:

plugins {
    id "maven-publish"
    id "signing"
}

〜

signing {
    〜
}

Mavenセントラルリポジトリーにjarファイルをアップロードする際は、電子署名が必要となる。


GnuPG

GnuPGを使って鍵を作成する。

GnuPGはgpgコマンドで操作する。

自分の場合はWindowsなので、GnuPGのダウンロードサイトからWindows版のGnuPG(gpg4win-4.1.0.exe)をダウンロード・インストールした。

  1. 鍵を生成する。(Windowsの場合、鍵データはC:\Users\ユーザー\AppData\Roaming\gnupgの下に作られる)
    > gpg --full-gen-key
    1. (1) RSA and RSAを選択
    2. keysizeに2048を入力
    3. 0 = key does not expireを選択
    4. Real name, Email address, Commentを入力
    5. パスフレーズを決めて入力
  2. 作られた公開鍵を確認する。
    > gpg --list-keys
    ------------------------------------------------
    pub   rsa2048 2023-06-19 [SC]
          4B12B38CXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
  3. 作成した公開鍵を鍵サーバーに登録する。
    > gpg --send-keys 4B12B38CXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
  4. (しばらく待ってから)鍵サーバーに登録されたことを確認する。
    > gpg --search-keys 4B12B38CXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
  5. (signingプラグインで使うので)秘密鍵をexportしておく。
    > gpg --export-secret-keys -o ユーザーホーム/.gnupg/secring.gpg
  6. (signingプラグインで使うので)ショート形式の鍵IDを確認しておく。
    > gpg --list-secret-keys --keyid-format short
    ------------------------------------------------
    sec rsa2048/AC6AXXXX 2023-06-19 [SC]
          4B12B38CXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    ↑AC6AXXXXが鍵ID。

Gradleのsigningプラグインで使用する為に、gradle.propertiesに鍵の情報を記載しておく。

ユーザーのホームディレクトリー/.gradle/gradle.properties

signing.keyId=AC6AXXXX
signing.password=鍵作成時のパスフレーズ
signing.secretKeyRingFile=ユーザーホーム/.gnupg/secring.gpg

sonatypeUsername=Sonatypeアカウント
sonatypePassword=Sonatypeパスワード

※sonatypeの設定は電子署名とは関係ない。
 Mavenセントラルリポジトリーを管理しているSonatypeのサイトにログインする為のアカウント。maven-publishプラグインの設定から参照する。


signingプラグインでmaven-publishプラグインの設定を指定する。

build.gradle(Gradle6):

plugins {
    id "maven-publish"
    id "signing"
}

〜

publishing {
    publications {
        mavenJava(MavenPublication) {
            〜
        }
    }
}

signing {
    required { gradle.taskGraph.hasTask("publishMavenJavaPublicationToMavenRepository") }
    sign publishing.publications.mavenJava
}

requiredで署名を実施する(ascファイルを生成する)かどうかを指定できる。[2023-10-01]
requiredが無いとtrue扱いで、常に署名される。
しかし署名の鍵が無い環境でpublishToMavenLocal(Mavenローカルリポジトリーにpublish)してもエラーになるので、必要なときだけ署名したい。
requiredにgradle.taskGraph.hasTask()を指定することで、特定のタスクが実行されるときだけ署名するように出来る。

Mavenセントラルリポジトリーに公開する為のpublishingの例


Gradle目次へ戻る / 技術メモへ戻る
メールの送信先:ひしだま