Skip to main content

Gradleレジストリの利用

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

注: サイト管理者はそれぞれのサポートされているパッケージの種類を有効化あるいは無効化できるので、このパッケージの種類はインスタンスで利用できないかもしれません。 詳細については、「エンタープライズ向けのパッケージ サポートの構成」を参照してください。

GitHub Packages への認証を行う

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

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

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

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

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

personal access token で認証を行う

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

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

REGISTRY-URL をインスタンスの Maven レジストリの URL に置き換えます。 インスタンスで Subdomain Isolation が有効になっている場合は、maven.HOSTNAME を使用します。 インスタンスで Subdomain Isolation が無効になっている場合は、HOSTNAME/_registry/maven を使用します。 いずれの場合でも、HOSTNAME を GitHub Enterprise Server インスタンスのホスト名に置き換えてください。

USERNAME を GitHub のユーザー名に、TOKEN を personal access token に、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://REGISTRY-URL/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://REGISTRY-URL/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://REGISTRY-URL/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://REGISTRY-URL/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://REGISTRY-URL/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://REGISTRY-URL/OWNER/REPOSITORY")
            credentials {
                username = project.findProperty("gpr.user") as String? ?: System.getenv("USERNAME")
                password = project.findProperty("gpr.key") as String? ?: System.getenv("TOKEN")
            }
        }
    }

参考資料