跳至主要内容

使用 Gradle 注册表

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

对 GitHub Packages 进行身份验证

注意

GitHub Packages 仅支持使用个人访问令牌(经典版)进行身份验证。欲了解更多信息,请参阅 管理您的个人访问令牌

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

您可以使用个人访问令牌(经典版)对 GitHub Packages 或 GitHub API 进行身份验证。创建个人访问令牌(经典版)时,可根据需要为令牌分配不同的范围。有关个人访问令牌(经典版)的软件包相关范围的更多信息,请参阅 GitHub Packages 权限概述

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

  • GITHUB_TOKEN 来发布与工作流仓库关联的软件包。
  • 使用至少具备 read:packages 范围的个人访问令牌(经典版)来安装与其他私有仓库关联的软件包(如果仓库被授予读取软件包的权限,也可以使用 GITHUB_TOKEN。参见 配置软件包的访问控制和可见性)。

有关在 GitHub Actions 工作流中使用的 GITHUB_TOKEN 的更多信息,请参阅 在工作流中使用 GITHUB_TOKEN 进行身份验证。有关在 Gradle 中使用 GITHUB_TOKEN 的更多信息,请参阅 使用 Gradle 发布 Java 软件包

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

您必须使用具备相应范围的个人访问令牌(经典版)来在 GitHub Packages 中发布和安装软件包。更多信息请参阅 GitHub Packages 入门

你可以通过编辑 build.gradle(Gradle Groovy)或 build.gradle.kts(Kotlin DSL)文件,将个人访问令牌(classic)写入其中,从而使用 Gradle Groovy 或 Kotlin DSL 对 GitHub Packages 进行身份验证。你也可以配置 Gradle Groovy 和 Kotlin DSL,使其能够识别仓库中的单个软件包或多个软件包。

将 USERNAME 替换为你的 GitHub 用户名,将 TOKEN 替换为你的个人访问令牌(classic),将 REPOSITORY 替换为包含你想要发布的软件包的仓库名称,将 OWNER 替换为拥有该仓库的个人账户或组织名称。由于不支持大写字母,你必须使用小写字母来表示仓库所有者,即使 GitHub 用户或组织名称中含有大写字母。

注意

GitHub Packages 支持 Apache Maven 的 SNAPSHOT 版本。要在下载 SNAPSHOT 构件时使用 GitHub Packages 仓库,需要在消费项目的 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")
            }
        }
    }
    

延伸阅读

© . This site is unofficial and not affiliated with GitHub, Inc.