Skip to main content

Gradleレジストリの利用

パッケージをGitHub Packages Gradleレジストリに公開し、GitHub Packagesに保存されているパッケージをJavaプロジェクト中で依存関係として使うようにGradleを設定できます。

GitHub Packages は、GitHub Free、GitHub Pro、Organization の GitHub Free、GitHub Team、GitHub Enterprise Cloud、GitHub Enterprise Server 3.0 以降、GitHub AE で利用できます。
GitHub Packagesは、レガシーのリポジトリごとのプランを使っているアカウントが所有しているプライベートリポジトリでは利用できません。 また、レガシーのリポジトリごとのプランを使っているアカウントは、リポジトリごとに課金される Container registry にはアクセスできません。 詳細については、「GitHub's products」を参照してください。

GitHub Packages への認証を行う

GitHub Packages では、personal access token (classic)を使用した認証のみがサポートされています。 詳しい情報については、「personal access tokenの作成」を参照してください。

非公開パッケージ、内部パッケージ、公開パッケージを発行、インストール、削除するには、アクセス トークンが必要です。

personal access token (classic) を使って、GitHub Packages または GitHub API の認証を受けることができます。 personal access token (classic) を作成するときは、必要に応じてさまざまなスコープをトークンに割り当てることができます。 personal access token (classic) のパッケージ関連のスコープについて詳しくは、「GitHub パッケージのアクセス許可について」をご覧ください。

GitHub Actionsワークフロー内でGitHub Packagesレジストリに認証を受けるには、以下の方法が使えます。

  • GITHUB_TOKEN では、ワークフロー リポジトリに関連付けられているパッケージを発行します。
  • read:packages 以上のスコープが設定された personal access token (classic) では、他のプライベート リポジトリ (GITHUB_TOKEN ではアクセスできない) に関連付けられているパッケージがインストールされます。

GitHub Actions ワークフローで使用される GITHUB_TOKEN の詳細については、「ワークフローで認証する」を参照してください。 Gradle での GITHUB_TOKEN の使用の詳細については、「Gradle を使用した Java パッケージの公開」を参照してください。

personal access token で認証を行う

GitHub Packages でパッケージを発行およびインストールするには、適切なスコープで personal access token (classic) を使う必要があります。 詳しくは、「GitHub Packages について」をご覧ください。

Gradle Groovy または Kotlin DSL を使って、GitHub Packages に対して Gradle による認証を受けることができます。そのためには、build.gradle ファイル (Gradle Groovy) または build.gradle.kts ファイル (Kotlin DSL) ファイルを編集して、personal access token (classic) を含める必要があります。 リポジトリ中の単一のパッケージもしくは複数パッケージを認識するようにGradle Groovy及びKotlin DSLを設定することもできます。

USERNAME を GitHub のユーザー名に、TOKEN を personal access token (classic) に、REPOSITORY を公開したいパッケージを含むリポジトリの名前に、OWNER をリポジトリを所有する GitHub のユーザーもしくは組織のアカウントに置き換えてください。 大文字はサポートされていないため、仮にGitHubのユーザあるいはOrganization名が大文字を含んでいても、リポジトリオーナーには小文字を使わなければなりません。

注: GitHub Packages では Apache Maven の SNAPSHOT バージョンがサポートされています。 SNAPSHOT 成果物のダウンロードに GitHub Packages リポジトリを使用するには、それを使用するプロジェクトまたは ~/.m2/settings.xml ファイルの POM で SNAPSHOTS を有効にします。 例については、「GitHub Packages で使用するための Apache Maven の構成」を参照してください。

リポジトリ中の単一のパッケージのためにGradle Groovyを使う例

plugins {
    id("maven-publish")
}
publishing {
    repositories {
        maven {
            name = "GitHubPackages"
            url = uri("https://maven.pkg.github.com/OWNER/REPOSITORY")
            credentials {
                username = project.findProperty("gpr.user") ?: System.getenv("USERNAME")
                password = project.findProperty("gpr.key") ?: System.getenv("TOKEN")
            }
        }
    }
    publications {
        gpr(MavenPublication) {
            from(components.java)
        }
    }
}

同じリポジトリ中の複数のパッケージのためにGradle Groovyを使う例

plugins {
    id("maven-publish") apply false
}
subprojects {
    apply plugin: "maven-publish"
    publishing {
        repositories {
            maven {
                name = "GitHubPackages"
                url = uri("https://maven.pkg.github.com/OWNER/REPOSITORY")
                credentials {
                    username = project.findProperty("gpr.user") ?: System.getenv("USERNAME")
                    password = project.findProperty("gpr.key") ?: System.getenv("TOKEN")
                }
            }
        }
        publications {
            gpr(MavenPublication) {
                from(components.java)
            }
        }
    }
}

同じリポジトリ中の単一パッケージのためにKotlin DSLを使う例

plugins {
    `maven-publish`
}
publishing {
    repositories {
        maven {
            name = "GitHubPackages"
            url = uri("https://maven.pkg.github.com/OWNER/REPOSITORY")
            credentials {
                username = project.findProperty("gpr.user") as String? ?: System.getenv("USERNAME")
                password = project.findProperty("gpr.key") as String? ?: System.getenv("TOKEN")
            }
        }
    }
    publications {
        register<MavenPublication>("gpr") {
            from(components["java"])
        }
    }
}

同じリポジトリ中の複数パッケージのためにKotlin DSLを使う例

plugins {
    `maven-publish` apply false
}
subprojects {
    apply(plugin = "maven-publish")
    configure<PublishingExtension> {
        repositories {
            maven {
                name = "GitHubPackages"
                url = uri("https://maven.pkg.github.com/OWNER/REPOSITORY")
                credentials {
                    username = project.findProperty("gpr.user") as String? ?: System.getenv("USERNAME")
                    password = project.findProperty("gpr.key") as String? ?: System.getenv("TOKEN")
                }
            }
        }
        publications {
            register<MavenPublication>("gpr") {
                from(components["java"])
            }
        }
    }
}

パッケージの公開

デフォルトでは、GitHubはパッケージはそのままの名前で既存のリポジトリに公開されます。 たとえば、GitHub は OWNER/test GitHub Packages リポジトリ内の com.example.test という名前のパッケージを公開します。

パッケージを公開した後は、GitHub上でそのパッケージを見ることができます。 詳しくは、「パッケージの表示」をご覧ください。

  1. GitHub Packagesに認証を受けてください。 詳細については、「GitHub Packages への認証」を参照してください。

  2. パッケージを作成した後、そのパッケージを公開できます。

    $ gradle publish

公開されたパッケージの利用

GitHub Packagesから公開されたパッケージを使うには、そのパッケージを依存関係として追加し、リポジトリをプロジェクトに追加してください。 詳細については、Gradle ドキュメントの「依存関係の宣言」を参照してください。

  1. GitHub Packagesに認証を受けてください。 詳細については、「GitHub Packages への認証」を参照してください。

  2. パッケージの依存関係を build.gradle ファイル (Gradle Groovy) または build.gradle.kts ファイル (Kotlin DSL) ファイルに追加します。

    Gradle Groovyの例:

    dependencies {
        implementation 'com.example:package'
    }

    Kotlin DSLの例:

    dependencies {
        implementation("com.example:package")
    }
  3. リポジトリを build.gradle ファイル (Gradle Groovy) または build.gradle.kts ファイル (Kotlin DSL) ファイルに追加します。

    Gradle Groovyの例:

    repositories {
        maven {
            url = uri("https://maven.pkg.github.com/OWNER/REPOSITORY")
            credentials {
                username = project.findProperty("gpr.user") ?: System.getenv("USERNAME")
                password = project.findProperty("gpr.key") ?: System.getenv("TOKEN")
            }
        }
    }

    Kotlin DSLの例:

    repositories {
        maven {
            url = uri("https://maven.pkg.github.com/OWNER/REPOSITORY")
            credentials {
                username = project.findProperty("gpr.user") as String? ?: System.getenv("USERNAME")
                password = project.findProperty("gpr.key") as String? ?: System.getenv("TOKEN")
            }
        }
    }

参考資料