向 GitHub Packages 认证
GitHub Packages 仅支持使用个人访问令牌(经典版)进行认证。有关更多信息,请参阅“管理个人访问令牌”。
需要访问令牌才能发布、安装和删除私有、内部和公共包。
可以使用个人访问令牌(经典版)向 GitHub Packages 或 GitHub API 认证。创建个人访问令牌(经典版)时,可以根据需要为令牌分配不同的范围。有关个人访问令牌(经典版)的包相关范围的更多信息,请参阅“关于 GitHub Packages 的权限”。
要在 GitHub 操作工作流中向 GitHub Packages 注册表认证,可以使用
GITHUB_TOKEN
用于发布与工作流存储库关联的包。- 个人访问令牌(经典版),至少具有
read:packages
范围,用于安装与其他私有存储库(GITHUB_TOKEN
无法访问)关联的包。
有关在 GitHub Actions 工作流中使用的 GITHUB_TOKEN
的更多信息,请参见“自动令牌验证”。有关将 GITHUB_TOKEN
与 Gradle 配合使用的更多信息,请参见“使用 Gradle 发布 Java 包”。
使用个人访问令牌进行身份验证
你必须使用具有适当范围的个人访问令牌(经典版)才能在 GitHub Packages 中发布和安装包。有关更多信息,请参见“GitHub Packages 简介”。
你可以使用 Gradle Groovy 或 Kotlin DSL 通过编辑你的 build.gradle 文件(Gradle Groovy)或 build.gradle.kts 文件(Kotlin DSL)以包含你的个人访问令牌(经典版),来使用 Gradle 对 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 文件中启用 SNAPSHOT。有关示例,请参见“使用 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 会将名为 com.example.test
的包发布到 OWNER/test
GitHub Packages 存储库中。
发布包后,你可以在 GitHub 上查看该包。有关详细信息,请参阅“查看包”。
-
向 GitHub Packages 验证身份。有关详细信息,请参阅“向 GitHub Packages 验证身份”。
-
创建包后,你可以发布该包。
gradle publish
使用已发布的包
要使用 GitHub Packages 中已发布的包,请将该包添加为依赖项,并将存储库添加到你的项目中。有关详细信息,请参阅 Gradle 文档中的“声明依赖项”。
-
向 GitHub Packages 验证身份。有关详细信息,请参阅“向 GitHub Packages 验证身份”。
-
将包依赖项添加到你的 build.gradle 文件(Gradle Groovy)或 build.gradle.kts 文件(Kotlin DSL)文件中。
使用 Gradle Groovy 的示例
dependencies { implementation 'com.example:package' }
使用 Kotlin DSL 的示例
dependencies { implementation("com.example:package") }
-
将存储库添加到你的 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") } } }