跳至主要内容

使用 Gradle 注册表

您可以配置 Gradle 将包发布到 GitHub Packages Gradle 注册表,并在 Java 项目中使用存储在 GitHub Packages 上的包作为依赖项。

谁可以使用此功能?

GitHub Packages 可用于 GitHub 免费版、GitHub 专业版、GitHub 组织免费版、GitHub 团队版、GitHub Enterprise Cloud 和 GitHub Enterprise Server 3.0 或更高版本。


使用旧版按仓库付费计划的帐户不提供对私有仓库的 GitHub Packages 支持。此外,使用旧版按仓库付费计划的帐户无法访问支持细粒度权限的注册表,因为这些帐户按仓库计费。有关支持细粒度权限的注册表列表,请参阅“GitHub Packages 的权限说明”。更多信息,请参阅“GitHub 的计划”。

对 GitHub Packages 进行身份验证

GitHub Packages 仅支持使用个人访问令牌(传统型)进行身份验证。更多信息,请参阅“管理您的个人访问令牌”。

您需要访问令牌才能发布、安装和删除私有、内部和公共包。

您可以使用个人访问令牌(传统型)对 GitHub Packages 或 GitHub API 进行身份验证。创建个人访问令牌(传统型)时,您可以根据需要为令牌分配不同的作用域。有关个人访问令牌(传统型)的与包相关的作用域的更多信息,请参阅“GitHub Packages 的权限说明”。

要在 GitHub Actions 工作流程中对 GitHub Packages 注册表进行身份验证,您可以使用

  • GITHUB_TOKEN 发布与工作流程仓库关联的包。
  • 具有至少 read:packages 作用域的个人访问令牌(传统型)安装与其他私有仓库关联的包(GITHUB_TOKEN 无法访问)。

有关在 GitHub Actions 工作流程中使用的 GITHUB_TOKEN 的更多信息,请参阅“自动令牌身份验证”。有关使用 Gradle 的 GITHUB_TOKEN 的更多信息,请参阅“使用 Gradle 发布 Java 包”。

使用个人访问令牌进行身份验证

您必须使用具有相应作用域的个人访问令牌(传统型)才能在 GitHub Packages 中发布和安装包。更多信息,请参阅“GitHub Packages 简介”。

您可以通过编辑 *build.gradle* 文件(Gradle Groovy)或 *build.gradle.kts* 文件(Kotlin DSL)以包含您的个人访问令牌(传统型),使用 Gradle Groovy 或 Kotlin DSL 对 GitHub Packages 进行身份验证。您还可以配置 Gradle Groovy 和 Kotlin DSL 以识别仓库中的单个包或多个包。

将 USERNAME 替换为您的 GitHub 用户名,将 TOKEN 替换为您的个人访问令牌(传统型),将 REPOSITORY 替换为包含您要发布的包的仓库的名称,将 OWNER 替换为 GitHub 上拥有该仓库的个人帐户或组织的名称。由于不支持大写字母,因此即使 GitHub 用户或组织名称包含大写字母,也必须对仓库所有者使用小写字母。

注意

GitHub Packages 支持 Apache Maven 的 SNAPSHOT 版本。要使用 GitHub Packages 仓库下载 SNAPSHOT 工件,请在使用者项目的 POM 或您的 *~/.m2/settings.xml* 文件中启用 SNAPSHOTS。例如,请参阅“使用 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")
            }
        }
    }
    

进一步阅读