はじめに
この記事は Github Packages に gradle shadow plugin を使って maven-publish する方法を備忘録として残しています。
おことわり
この記事は既に Gradle、gradle shadow plugin、maven-publishを使っている人を対象にしています。また Github Packages の説明もしません。あと、Gradle 難しくて全然理解できてないので他にいい方法あれば教えて下さい🙏
解決したい課題
- Jitpack を利用していたが安定性に難があるので他の Package Repository にも Publish しておいて Jitpack が利用できなくても他の Repository から依存 Package のインストールをできるようにしておきたい。
- CI も Github Actions で行っているため Github Packages に置けると全部 Github で解決する💪
- (少し無理やりな理由ですが要は使ってみたかったってことです)
- gradle shadow plugin を使ってるのでGithub Packages の公式ドキュメントに載っている方法 をカスタマイズしないと使えない。
- gradle shadow plugin の公式ドキュメント にも特に Github Packages に publish する方法は載ってない。
どう解決したか
publishing {
publications {
shadow(MavenPublication) { publication ->
project.shadow.component(publication)
}
}
repositories {
maven {
if (System.getenv("GITHUB_TOKEN")) {
name = "GitHubPackages"
url = uri("https://maven.pkg.github.com/civitaspo/publish-sample")
credentials {
username = "civitaspo"
password = System.getenv("GITHUB_TOKEN")
}
}
else {
url "$buildDir/repo"
}
}
}
}
-
publishing.publications
下は gradle shadow plugin の公式ドキュメント に載っている設定を追加します。 -
publishing.repositories
下は Github Packages の公式ドキュメント に載っている設定を追加します。-
GITHUB_TOKEN
が設定されている場合のみ maven.pkg.github.com に publish する設定を書いています。 -
password
と書いてますがGITHUB_TOKEN
を入れるようです。-
GITHUB_TOKEN
は https://github.com/settings/tokens から発行できます。 -
read:packages
,repo
,write:packages
の権限を与えておく必要があります。
-
-
おわりに
解決する方法は「そうだね」というかんじですが、 Gradle は Plugin も影響範囲がよく分からずソースコード読めばすぐ分かる感じじゃないので難しいですね。