1
1

More than 1 year has passed since last update.

Gradleで作ったライブラリをGitHub Packagesに公開する

Last updated at Posted at 2023-06-10

案外このことを簡潔に解説する記事がなかったので、分からない人用に書いておく。
なおこの記事は「なんかこうしたら動いた」であって、ベストプラクティスを説明するものではない。誰か教えてください。

対象読者

  • groupId って何?artifactId って何?というくらいの人(私もよく分からない)
  • すでにプロジェクトをビルドできるところまでは行っている

したいこと

  • Gradleで作ったライブラリを jar 形式で他の(Maven|Gradle)プロジェクトから簡単に読み込めるように公開したい
  • ライブラリを使う時、バージョンだけ指定して、ダウンロードはビルドツールにやらせたい

例: Mavenならこう指定して使えるようにしたい

pom.xml
<dependency>
  <groupId>com.skpub</groupId>
  <artifactId>calendertaskscheduler</artifactId>
  <version>1.0.0</version>
</dependency>

対象読者のところで書いた通り、groupId って何?artifactId って何?という人は、ここで示されていることである程度それらの役割が分かると思う。要するに、パッケージとして unique になるための情報であって、かつ使う側にとって必要になる情報ということだ。(本質は知らないがそういう側面があることは確かである。)

作業開始

1. personal access token (classic)) を発行する

これは GitHub Packages の利用に必要な作業だ。
https://github.com/settings/tokens
↑ここから画面右上の Generate new Token (クリックすると選択肢が出るが、classic の方を選ぶ)をクリックし、以下の画像のように権限設定をする。
image.png
(無駄に多めに権限を追加している可能性がある。信頼できない人は適宜調べてほしい。)
その後トークンを発行する。すると、それらしい文字列が出てくる。
この文字列を、ユーザの環境変数"GITHUB_TOKEN"に追加する。環境変数に追加する方法は OS により異なるので、適当な方法で追加してほしい。このとき、"GITHUB_USER"として、GitHub のユーザ名も環境変数に追加しておく。

2. publish できるように設定する

build.gradle
plugins {
    id 'maven-publish'
}

publishing {
    repositories {
        maven {
            name = 'GitHubPackages'
            url = uri('https://maven.pkg.github.com/[ユーザ名]/[リポジトリ名]')
            credentials {
                username = System.getenv('GITHUB_USERNAME')
                password = System.getenv('GITHUB_TOKEN')
            }
        }
    }
    publications {
        gpr(MavenPublication) {
            artifactId = '[指定したいartifactId(ただし全て小文字のこと)]'
            from(components.java)
        }
    }
}

このように設定に追記する。追記すると言っても、コピペすればいいというのではない。
まず、[云々]という部分は、云々の部分を貴方の環境に合わせた文字列に置き換えた上で[]を削除してほしいという意味である。
また、pluginsという要素はすでに存在して、その中にはすでに id 'java-library' などがあるはずだ。
こういうとき、その部分は

plugins {
    id 'java-library'
    id 'maven-publish'
}

とでもしておけばよい。他も同じことである。
なお、ここで groupId は? version は?と気になるはずだ。私も気になる。ただ私の build.gradle の場合はトップレベルに group, version という変数で設定されていた。どうやら勝手にこの部分から読んでくれるらしい。これらがなかった場合はトップレベルに追加するのが良いか、それとも publishing>publications>gpr(MavenPublication) 内に追加すればよいのか知らないが、とりあえず私の環境ではトップレベルに

group 'com.skpub'
version '1.0.0'

と設定されていた。ここが「ベストプラクティスではないので誰か教えてください。」の点である。教えてください。

この状態で、

~$ gradle publish

すれば、公開されてくれるはずだ。
当該リポジトリの画像で示した部分から、公開したものが見られるはずだ。
image.png
image.png

以上。

参考文献

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1