Skip to main content

使用 Gradle 注册表

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

注意:这种包类型可能不适用于你的实例,因为站点管理员可以启用或禁用每种支持的包类型。 有关详细信息,请参阅“为企业配置包支持”。

向 GitHub Packages 验证

需要访问令牌才能发布、安装和删除包。

可使用个人访问令牌 (PAT) 向 GitHub Packages 或 GitHub Enterprise Server API 进行身份验证。 创建个人访问令牌时,可根据需要为令牌分配不同的作用域。 有关 PAT 的包相关范围的详细信息,请参阅“关于 GitHub Packages 的权限”。

要在 GitHub Actions 工作流程内向 GitHub Packages 注册表验证,您可以使用:

  • GITHUB_TOKEN 发布与工作流存储库相关联的包。
  • PAT 来安装与其他专用存储库(GITHUB_TOKEN 无法访问)相关联的包。

有关 GitHub Actions 工作流中使用的 GITHUB_TOKEN 的详细信息,请参阅“工作流中的身份验证”。 有关将 GITHUB_TOKEN 与 Gradle 结合使用的详细信息,请参阅“使用 Gradle 发布 Java 包”。

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

您必须使用具有适当范围的个人访问令牌才可在 GitHub Packages 中发布和安装。 有关详细信息,请参阅“关于 GitHub Packages”。

你可以使用 Gradle Groovy 或 Kotlin DSL 通过 Gradle 向 GitHub Packages 进行验证,方法是编辑你的 build.gradle 文件 (Gradle Groovy) 或 build.gradle.kts 文件 (Kotlin DSL),将你的个人访问令牌包含在其中 。 您还可以配置 Gradle Groovy 和 Kotlin DSL 以识别仓库中的一个或多个包。

将 REGISTRY-URL 替换为你实例的 Maven 注册表的 URL。 如果你的实例启用了子域隔离功能,请使用 maven.HOSTNAME。 如果你的实例禁用了子域隔离功能,请使用 HOSTNAME/_registry/maven。 在任一情况下,都将 HOSTNAME 替换为 GitHub Enterprise Server 实例的主机名。

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

注意:GitHub Packages 支持 Apache Maven 的 SNAPSHOT 版本。 要使用 GitHub Packages 存储库下载 SNAPSHOT 工件,请在所用项目的 POM 或 ~/.m2/settings.xml 文件中启用 SNAPSHOTS。 有关示例,请参阅“配置 Apache Maven 以用于 GitHub Packages”。

将 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 将名为 com.example.test 的包发布到 OWNER/test GitHub Packages 存储库中。

在发布包后,您可以在 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")
            }
        }
    }

延伸阅读