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

使用 Gradle 发布 Java 包

您可以使用 Gradle 将 Java 包发布到注册表,作为持续集成 (CI) 工作流程的一部分。

GitHub Actions 可用于 GitHub Free、GitHub Pro、组织的 GitHub Free、GitHub Team、GitHub Enterprise Cloud 和 GitHub One。 GitHub Actions 不适用于使用旧版按仓库计划的帐户所拥有的私有仓库。 For more information, see "GitHub's products."

本文内容

此文档对您有帮助吗?

帮助我们创建出色的文档!

所有 GitHub 文档都是开源的。看到错误或不清楚的内容了吗?提交拉取请求。

做出贡献

或, 了解如何参与。

简介

本指南介绍如何创建将 Java 包发布到 GitHub Packages 和 Maven Central 仓库的工作流程。 通过单个工作流程,您可以将包发布到一个或多个仓库。

基本要求

建议对工作流程文件和配置选项有一个基本了解。 更多信息请参阅“Learn GitHub Actions”。

有关使用 Gradle 为 Java 项目创建 CI 工作流程的详细信息,请参阅“使用 Gradle 构建和测试用 Java”。

您可能还发现基本了解以下内容是有帮助的:

关于包配置

build.gradle 文件 MavenPublication 部分的 groupIdartifactId 字段为包创建唯一标识符,供注册表用来将包链接到注册表。 这类似于 Maven pom.xml 文件的 groupIdartifactId 字段。 更多信息请参阅 Gradle 文档中的“Maven 发布插件”。

build.gradle 文件还包含 Gradle 将在其中部署包的分发管理仓库的配置。 每个仓库必须有名称、部署 URL 和验证凭据。

将包发布到 Maven 中心仓库

每次创建新版本时,都可以触发工作流程来发布包。 以下示例中的工作流程在类型为 createdrelease 事件触发时运行。 如果 CI 测试通过,工作流程将包发布到 Maven 中心仓库。 有关 release 事件的更多信息,请参阅“触发工作流程的事件”。

您可以在 build.gradle 文件的发布块中定义指向包仓库的新 Maven 仓库。 例如,如果您通过 OSSRH 托管项目部署到 Maven 中心仓库,则 build.gradle 可以指定名称为 "OSSRH" 的仓库。

publishing {
  ...

  repositories {
    maven {
      name = "OSSRH"
      url = "https://oss.sonatype.org/service/local/staging/deploy/maven2/"
      credentials {
        username = System.getenv("MAVEN_USERNAME")
        password = System.getenv("MAVEN_PASSWORD")
      }
    }
  }
}

使用此配置可创建一个工作流程,以通过运行 gradle publish 命令将包发布到 Maven 中心仓库。 您还需要提供包含用户名和密码的环境变量向仓库验证。

在部署步骤中,您需要为用于向 Maven 仓库验证身份的用户名和密码或令牌设置环境变量。 更多信息请参阅“创建和使用加密密码”。

name: Publish package to the Maven Central Repository
on:
  release:
    types: [created]
jobs:
  publish:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Set up Java
        uses: actions/setup-java@v1
        with:
          java-version: 1.8
      - name: Publish package
        run: gradle publish
        env:
          MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }}
          MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }}

此工作流程执行以下步骤:

  1. 检出项目仓库的副本。

  2. 设置 Java JDK。

  3. 运行 gradle published 命令以发布到 OSSRH Maven 仓库。 MAVEN_USERNAME 环境变量将使用 OSSRH_USERNAME 密码的内容设置,而 MAVEN_PASSWORD 环境变量将使用 OSSRH_TOKEN 密码的内容设置。

    有关在工作流程中使用密码的更多信息,请参阅“创建和使用加密密码”。

发布包到 GitHub Packages

每次创建新版本时,都可以触发工作流程来发布包。 以下示例中的工作流程在类型为 createdrelease 事件触发时运行。 如果 CI 测试通过,工作流程会将包发布到 GitHub Packages。 有关 release 事件的更多信息,请参阅“触发工作流程的事件”。

您可以在 build.gradle 文件的发布块中定义指向 GitHub Packages 的新 Maven 仓库。 在仓库配置中,您也可以利用在 CI 工作流程运行中设置的环境变量。 您可以使用 GITHUB_ACTOR 环境变量作为用户名,并且可以使用 GITHUB_TOKENN 密码设置 GITHUB_TOKEN 环境变量。

GITHUB_TOKEN 默认存在于您的仓库中,并且对工作流程运行的仓库中的包具有读取和写入权限。 更多信息请参阅“使用 GITHUB_TOKEN 验证身份”。

例如,如果组织名为“octocat”且仓库名为“hello-world”,则 build.gradle 中的 GitHub Packages 配置看起来类似于以下示例。

publishing {
  ...

  repositories {
    maven {
      name = "GitHubPackages"
      url = "https://maven.pkg.github.com/octocat/hello-world"
      credentials {
        username = System.getenv("GITHUB_ACTOR")
        password = System.getenv("GITHUB_TOKEN")
      }
    }
  }
}

使用此配置可创建一个工作流程,以通过运行 gradle publish 命令将包发布到 Maven 中心仓库。

name: Publish package to GitHub Packages
on:
  release:
    types: [created]
jobs:
  publish:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-java@v1
        with:
          java-version: 1.8
      - name: Publish package
        run: gradle publish
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

此工作流程执行以下步骤:

  1. 检出项目仓库的副本。

  2. 设置 Java JDK。

  3. 运行 gradle published 命令以发布到 GitHub Packages。 GITHUB_TOKEN 环境变量将使用 GITHUB_TOKEN 密码的内容设置。

    有关在工作流程中使用密码的更多信息,请参阅“创建和使用加密密码”。

发布包到 Maven 中心仓库和 GitHub Packages

您可以通过在 build.gradle 文件中配置每项设置,将包发布到 Maven 中心仓库和 GitHub Packages。

确保 build.gradle 文件包含用于 GitHub 仓库和 Maven 中心仓库提供商的仓库。

例如,如果您通过 OSSRH 托管项目部署到 Maven 中心仓库,您可能想要在分发管理仓库中指定它,并将 name 设置为 OSSRH。 如果您部署到 GitHub Packages,您可能想要在分发管理仓库中指定它,并将 name 设置为 GitHubPackages

如果组织名为“octocat”且仓库名为“hello-world”,则 build.gradle 中的 GitHub Packages 配置看起来类似于以下示例。

publishing {
  ...

  repositories {
    maven {
      name = "OSSRH"
      url = "https://oss.sonatype.org/service/local/staging/deploy/maven2/"
      credentials {
        username = System.getenv("MAVEN_USERNAME")
        password = System.getenv("MAVEN_PASSWORD")
      }
    }
    maven {
      name = "GitHubPackages"
      url = "https://maven.pkg.github.com/octocat/hello-world"
      credentials {
        username = System.getenv("GITHUB_ACTOR")
        password = System.getenv("GITHUB_TOKEN")
      }
    }
  }
}

使用此配置可创建一个工作流程,以通过运行 gradle publish 命令将包发布到 Maven 中心仓库和 GitHub Packages。

name: Publish package to the Maven Central Repository and GitHub Packages
on:
  release:
    types: [created]
jobs:
  publish:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Set up Java
        uses: actions/setup-java@v1
        with:
          java-version: 1.8
      - name: Publish to the Maven Central Repository
        run: gradle publish
        env:
          MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }}
          MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }}
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

此工作流程执行以下步骤:

  1. 检出项目仓库的副本。

  2. 设置 Java JDK。

  3. 运行 gradle published 命令以发布到 OSSRH Maven 仓库和 GitHub Packages。 MAVEN_USERNAME 环境变量将使用 OSSRH_USERNAME 密码的内容设置,而 MAVEN_PASSWORD 环境变量将使用 OSSRH_TOKEN 密码的内容设置。 GITHUB_TOKEN 环境变量将使用 GITHUB_TOKEN 密码的内容设置。

    有关在工作流程中使用密码的更多信息,请参阅“创建和使用加密密码”。

此文档对您有帮助吗?

帮助我们创建出色的文档!

所有 GitHub 文档都是开源的。看到错误或不清楚的内容了吗?提交拉取请求。

做出贡献

或, 了解如何参与。