我们经常发布文档更新,此页面的翻译可能仍在进行中。有关最新信息,请访问英文文档。如果此页面上的翻译有问题,请告诉我们

配置 Gradle 用于 GitHub 包

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

GitHub Packages is available with GitHub Free, GitHub Pro, GitHub Free for organizations, GitHub Team, GitHub Enterprise Cloud, GitHub Enterprise Server 2.22, and GitHub One.


GitHub Packages 不适用于使用旧版按仓库计划的帐户所拥有的私有仓库。 GitHub Packages 可用于 GitHub Free、GitHub Pro、组织的 GitHub Free、GitHub Team、GitHub Enterprise Cloud 和 GitHub One。 更多信息请参阅“GitHub 的产品”。

本文内容

Did this doc help you?

注:安装或发布 Docker 映像时,GitHub Packages 当前不支持外部图层,如 Windows 映像。

向 GitHub Packages 验证

您需要访问令牌才能发布、安装和删除 GitHub Packages 中的包。 您可以使用个人访问令牌直接向 GitHub Packages 或 GitHub API 验证您的用户名。 创建个人访问令牌时,可根据需要为令牌分配不同的作用域。

To authenticate using a GitHub Actions workflow:

  • For package registries (PACKAGE-REGISTRY.pkg.github.com/OWNER/REPOSITORY/IMAGE-NAME), you can use a GITHUB_TOKEN.
  • For the container registry (ghcr.io/OWNER/IMAGE-NAME), you must use a personal access token.

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

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

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

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

注:GitHub Packages 支持 Apache Maven 的 SNAPSHOT 版本。 要使用仓库下载此类构件,必须在 ~/.m2/settings.xml 文件中启用 SNAPSHOTS。 关于示例,请参阅“配置 Apache Maven 用于 GitHub Packages”。

将 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("gpr") {
            from(components["java"])
        }
    }
} ?: System.getenv("USERNAME")
                password = project.findProperty("gpr.key") as String? ?: System.getenv("TOKEN")
            }
        }
    }
    publications {
        register("gpr") {
            from(components["java"])
        }
    }
}
将 Kotlin DSL 用于同一个仓库中多个包的示例
plugins {
  `maven-publish` apply false
  }

  subprojects {
  apply(plugin = "maven-publish")
  configure {
  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("gpr") {
  from(components["java"])
  }
  }
  }
  } ?: System.getenv("USERNAME")
  password = project.findProperty("gpr.key") as String? ?: System.getenv("TOKEN")
  }
  }
  }
  publications {
  register("gpr") {
  from(components["java"])
  }
  }
  }
  }

使用 GITHUB_TOKEN 进行身份验证

如果您使用的是 GitHub Actions 工作流程,可以使用 GITHUB_TOKEN 发布和使用 GitHub Packages 中的软件包,而无需存储和管理个人访问令牌。 更多信息请参阅“使用 GITHUB_TOKEN 验证身份”。

有关将 GITHUB_TOKEN 用于 Maven 的更多信息,请参阅“使用 Maven 发布 Java 包”。

发布包

默认情况下,GitHub 将包发布到名称与包相同的现有仓库中。 例如,GitHub 将名为 com.example.test 的包发布到 OWNER/test GitHub Packages 仓库中。

在发布包后,您可以在 GitHub 上查看该包。 更多信息请参阅“查看包”。

  1. 向 GitHub Packages 验证。 更多信息请参阅“向 GitHub Packages 验证”。

  2. 创建包后,您可以发布包。

    $ gradle publish

安装包

通过添加包作为您项目中的依赖项,您可以安装包。 更多信息请参阅 Gradle 文档中的“声明依赖项”。

  1. 向 GitHub Packages 验证。 更多信息请参阅“向 GitHub Packages 验证”。

  2. 将包依赖项添加到您的 build.gradle 文件 (Gradle Groovy) 或 build.gradle.kts 文件 (Kotlin DSL)。

    使用 Grady Groovy 的示例:

    dependencies {
    implementation 'com.example:package'
    }

    使用 Kotlin DSL 的示例:

    dependencies {
    implementation("com.example:package")
    }
  3. 将 maven 插件添加到您的 build.gradle 文件 (Gradle Groovy) 或 build.gradle.kts 文件 (Kotlin DSL)。

    使用 Grady Groovy 的示例:

    plugins {
    id 'maven'
    }

    使用 Kotlin DSL 的示例:

    plugins {
    `maven`
    }
  4. 安装包。

    $ gradle install

延伸阅读

Did this doc help you?