Skip to main content

使用 Gradle 注册表

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

注意

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

正在对GitHub Packages进行身份验证

注意

GitHub Packages 仅支持使用 personal access token (classic) 进行身份验证。 有关详细信息,请参阅“管理个人访问令牌”。

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

你可以使用 personal access token (classic) 向 GitHub Packages 或 GitHub API 进行身份验证。 创建 personal access token (classic) 时,可根据需要为令牌分配不同的作用域。 有关 personal access token (classic) 的包相关作用域的详细信息,请参阅 关于 GitHub Packages 的权限

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

  • GITHUB_TOKEN 发布与工作流存储库相关联的包。
  • 范围至少为 read:packages 的 personal access token (classic),用于安装与其他专用存储库关联的包(如果向存储库授予对包的读取访问权限,可以使用 GITHUB_TOKEN。 请参阅 配置包的访问控制和可见性)。

有关 GitHub Actions 工作流中使用的 GITHUB_TOKEN 的详细信息,请参阅 在工作流中使用 GITHUB_TOKEN 进行身份验证。 有关与 Gradle 一起使用 GITHUB_TOKEN 的详细信息,请参阅 使用 Gradle 发布Java包

使用personal access token进行身份验证

必须使用具有适当范围的 personal access token (classic) 才可在 GitHub Packages 中发布和安装包。 有关详细信息,请参阅“GitHub Packages 简介”。

您可以使用 Gradle,通过编辑 build.gradle 文件(Gradle Groovy)或 build.gradle.kts 文件(Kotlin DSL)以包含您的 GitHub Packages,使用 Gradle Groovy 或 Kotlin DSL 向 personal access token (classic) 进行身份验证。 您还可以配置 Gradle Groovy 和 Kotlin DSL 以识别仓库中的一个或多个包。

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

将 USERNAME 替换为您的 GitHub 用户名,将 TOKEN 替换为您的 personal access token (classic),将 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://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.testOWNER/testGitHub 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")
            }
        }
    }
    

其他阅读材料