はじめに
このガイドは、JavaのパッケージをGitHub PackagesやMaven Central Repositoryに公開するワークフローの作成方法を紹介します。 1つのワークフローで、パッケージを1つのリポジトリあるいは複数のリポジトリに公開できます。
警告
このガイドで使われている例は、レガシ OSSRH サービスを参照しています。 Maven Central リポジトリ ドキュメントの「Publishing」(公開) を参照してください。
前提条件
ワークフローファイルと設定オプションに関する基本的な理解をしておくことをおすすめします。 詳しくは、「ワークフローの書き込み」をご覧ください。
Gradle を使用してJava プロジェクトの CI ワークフローを作成する方法の詳細については、「Gradle を使用したJavaの構築とテストを参照してください。
また、以下の基本的な理解があれば役立ちます。
-
[AUTOTITLE](/packages/working-with-a-github-packages-registry/working-with-the-apache-maven-registry) -
[AUTOTITLE](/actions/learn-github-actions/variables) -
[AUTOTITLE](/actions/security-guides/using-secrets-in-github-actions) -
[AUTOTITLE](/actions/security-guides/automatic-token-authentication)
パッケージの設定について
`MavenPublication` セクションの `groupId` および `artifactId` フィールドは、_build.gradle_ ファイル内でレジストリがパッケージをレジストリにリンクするために使用する、パッケージに対する一意の識別子を作成します。 これは、Maven の `groupId` ファイルの `artifactId` および __ フィールドと似ています。 詳しくは、Gradle のドキュメント「[Maven 公開プラグイン](https://docs.gradle.org/current/userguide/publishing_maven.html)」をご覧ください。
_build.gradle_ ファイルには、Gradle によるパッケージの公開先である配布管理リポジトリの設定も含まれています。 各リポジトリは、名前、デプロイメントのURL、認証のためのクレデンシャルを持っていなければなりません。
Maven Central Repositoryへのパッケージの公開
新しいリリースを作成するたびに、パッケージを公開するワークフローを起動できます。 次の例のワークフローでは、release イベントが created 型でトリガーされたときに実行されます。 このワークフローは、CIテストをパスすればMaven Central Repositoryにパッケージを公開します。
release イベントの詳細については、「ワークフローをトリガーするイベント」を参照してください。
_build.gradle_ ファイルのパッケージ リポジトリを指す publishing ブロックで、新しい Maven リポジトリを定義できます。 たとえば、OSSRH ホスティング プロジェクトを使用して Maven Central Repository にデプロイした場合、_build.gradle_ では `"OSSRH"` という名前でリポジトリを指定できます。
plugins {
...
id 'maven-publish'
}
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")
}
}
}
}
plugins {
...
id 'maven-publish'
}
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 Central Repository に公開するワークフローを作成できます。 デプロイのステップでは、ユーザ名とパスワードのための環境変数か、Mavenリポジトリの認証に使うトークンを環境変数に設定する必要があります。 詳しくは、「GitHub Actions でのシークレットの使用」をご覧ください。
# このワークフローはGitHubによって認定されていないアクションを使用します。
# それらはサードパーティによって提供され、
# 別個の利用規約、プライバシーポリシー、
# ドキュメントを参照してください。
# GitHub では、コミット SHA にアクションをピン留めすることが推奨されます。
# 新しいバージョンを取得するには、SHA を更新する必要があります。
# タグまたはブランチを参照することもできますが、アクションは警告なしに変更される可能性があります。
name: Publish package to the Maven Central Repository
on:
release:
types: [created]
jobs:
publish:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- name: Set up Java
uses: actions/setup-java@v4
with:
java-version: '11'
distribution: 'temurin'
- name: Setup Gradle
uses: gradle/actions/setup-gradle@017a9effdb900e5b5b2fddfb590a105619dca3c3 # v4.4.2
- name: Publish package
run: ./gradlew publish
env:
MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }}
MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }}
# このワークフローはGitHubによって認定されていないアクションを使用します。
# それらはサードパーティによって提供され、
# 別個の利用規約、プライバシーポリシー、
# ドキュメントを参照してください。
# GitHub では、コミット SHA にアクションをピン留めすることが推奨されます。
# 新しいバージョンを取得するには、SHA を更新する必要があります。
# タグまたはブランチを参照することもできますが、アクションは警告なしに変更される可能性があります。
name: Publish package to the Maven Central Repository
on:
release:
types: [created]
jobs:
publish:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- name: Set up Java
uses: actions/setup-java@v4
with:
java-version: '11'
distribution: 'temurin'
- name: Setup Gradle
uses: gradle/actions/setup-gradle@017a9effdb900e5b5b2fddfb590a105619dca3c3 # v4.4.2
- name: Publish package
run: ./gradlew publish
env:
MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }}
MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }}
このワークフローは以下のステップを実行します。
-
プロジェクトのリポジトリのコピーをチェックアウトします。
-
Java JDKをセットアップします。
-
Gradle 環境を設定します。
gradle/actions/setup-gradleアクションは 、ワークフロー実行間のキャッシュ状態を処理し、すべての Gradle 実行の詳細な概要を提供します。 -
Gradle
publishタスクを実行してOSSRHMaven リポジトリに発行します。MAVEN_USERNAME環境変数にはOSSRH_USERNAMEシークレットの内容が設定され、MAVEN_PASSWORD環境変数にはOSSRH_TOKENシークレットの内容が設定されます。ワークフローでのシークレットの使用について詳しくは、「GitHub Actions でのシークレットの使用」をご覧ください。
GitHub Packagesへのパッケージの公開
新しいリリースを作成するたびに、パッケージを公開するワークフローを起動できます。 次の例のワークフローでは、release イベントが created 型でトリガーされたときに実行されます。 このワークフローは、CIテストをパスすればGitHub Packagesにパッケージを公開します。
release イベントの詳細については、「ワークフローをトリガーするイベント」を参照してください。
GitHub Packages を指す build.gradle の publishing ブロックで、新しい Maven リポジトリを定義できます。 そのリポジトリの設定では、CIワークフローの実行で設定された環境変数を活用することもできます。
GITHUB_ACTOR 環境変数をユーザー名として使用でき、GITHUB_TOKEN 環境変数に GITHUB_TOKEN シークレットを設定できます。
ワークフロー内のジョブが開始されるたびに、GITHUB_TOKEN シークレットはそのリポジトリのアクセス トークンに設定されます。 ワークフロー ファイルでこのアクセス トークンにアクセス許可を設定して、contents アクセス許可に対する読み取りアクセスと、packages アクセス許可に対する書き込みアクセスを付与する必要があります。 詳しくは、「ワークフローでの認証に GITHUB_TOKEN を使用する」をご覧ください。
たとえば、Organization の名前が "octocat" で、リポジトリの名前が "hello-world" の場合、build.gradle の GitHub Packages の構成は次の例のようになります。
plugins {
...
id 'maven-publish'
}
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")
}
}
}
}
plugins {
...
id 'maven-publish'
}
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 コマンドを実行することによりパッケージを GitHub Packages に公開するワークフローを作成できます。
# このワークフローはGitHubによって認定されていないアクションを使用します。
# それらはサードパーティによって提供され、
# 別個の利用規約、プライバシーポリシー、
# ドキュメントを参照してください。
# GitHub では、コミット SHA にアクションをピン留めすることが推奨されます。
# 新しいバージョンを取得するには、SHA を更新する必要があります。
# タグまたはブランチを参照することもできますが、アクションは警告なしに変更される可能性があります。
name: Publish package to GitHub Packages
on:
release:
types: [created]
jobs:
publish:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- uses: actions/checkout@v5
- uses: actions/setup-java@v4
with:
java-version: '11'
distribution: 'temurin'
- name: Setup Gradle
uses: gradle/actions/setup-gradle@017a9effdb900e5b5b2fddfb590a105619dca3c3 # v4.4.2
- name: Publish package
run: ./gradlew publish
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# このワークフローはGitHubによって認定されていないアクションを使用します。
# それらはサードパーティによって提供され、
# 別個の利用規約、プライバシーポリシー、
# ドキュメントを参照してください。
# GitHub では、コミット SHA にアクションをピン留めすることが推奨されます。
# 新しいバージョンを取得するには、SHA を更新する必要があります。
# タグまたはブランチを参照することもできますが、アクションは警告なしに変更される可能性があります。
name: Publish package to GitHub Packages
on:
release:
types: [created]
jobs:
publish:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- uses: actions/checkout@v5
- uses: actions/setup-java@v4
with:
java-version: '11'
distribution: 'temurin'
- name: Setup Gradle
uses: gradle/actions/setup-gradle@017a9effdb900e5b5b2fddfb590a105619dca3c3 # v4.4.2
- name: Publish package
run: ./gradlew publish
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
このワークフローは以下のステップを実行します。
-
プロジェクトのリポジトリのコピーをチェックアウトします。
-
Java JDKをセットアップします。
-
Gradle 環境を設定します。
gradle/actions/setup-gradleアクションは 、ワークフロー実行間のキャッシュ状態を処理し、すべての Gradle 実行の詳細な概要を提供します。 -
Gradle
publishタスクを実行して、GitHub Packages に公開します。GITHUB_TOKEN環境変数には、GITHUB_TOKENシークレットの内容が設定されます。permissionsキーでは、GITHUB_TOKENシークレットによって許可されるアクセス権を指定します。ワークフローでのシークレットの使用について詳しくは、「GitHub Actions でのシークレットの使用」をご覧ください。
Maven Central RepositoryとGitHub Packagesへのパッケージの公開
_build.gradle_ ファイルでそれぞれを構成することにより、Maven Central Repository と GitHub Packages の両方にパッケージを公開できます。
_build.gradle_ ファイルに、GitHub リポジトリと Maven Central Repository プロバイダー両方に対するリポジトリを含めます。
たとえば、OSSRH ホスティング プロジェクトを通じて Central Repository にデプロイする場合は、name を OSSRH に設定して、配布管理リポジトリでそのことを指定できます。 GitHub Packages にデプロイする場合は、name を GitHubPackages に設定することで、配布管理リポジトリでそのことを指定できます。
Organization の名前が "octocat" で、リポジトリの名前が "hello-world" の場合、build.gradle の構成は次の例のようになります。
plugins {
...
id 'maven-publish'
}
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")
}
}
}
}
plugins {
...
id 'maven-publish'
}
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 Central Repository と GitHub Packages の両方に公開するワークフローを作成できます。
# このワークフローはGitHubによって認定されていないアクションを使用します。
# それらはサードパーティによって提供され、
# 別個の利用規約、プライバシーポリシー、
# ドキュメントを参照してください。
# GitHub では、コミット SHA にアクションをピン留めすることが推奨されます。
# 新しいバージョンを取得するには、SHA を更新する必要があります。
# タグまたはブランチを参照することもできますが、アクションは警告なしに変更される可能性があります。
name: Publish package to the Maven Central Repository and GitHub Packages
on:
release:
types: [created]
jobs:
publish:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- uses: actions/checkout@v5
- name: Set up Java
uses: actions/setup-java@v4
with:
java-version: '11'
distribution: 'temurin'
- name: Setup Gradle
uses: gradle/actions/setup-gradle@017a9effdb900e5b5b2fddfb590a105619dca3c3 # v4.4.2
- name: Publish package
run: ./gradlew publish
env:
MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }}
MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# このワークフローはGitHubによって認定されていないアクションを使用します。
# それらはサードパーティによって提供され、
# 別個の利用規約、プライバシーポリシー、
# ドキュメントを参照してください。
# GitHub では、コミット SHA にアクションをピン留めすることが推奨されます。
# 新しいバージョンを取得するには、SHA を更新する必要があります。
# タグまたはブランチを参照することもできますが、アクションは警告なしに変更される可能性があります。
name: Publish package to the Maven Central Repository and GitHub Packages
on:
release:
types: [created]
jobs:
publish:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- uses: actions/checkout@v5
- name: Set up Java
uses: actions/setup-java@v4
with:
java-version: '11'
distribution: 'temurin'
- name: Setup Gradle
uses: gradle/actions/setup-gradle@017a9effdb900e5b5b2fddfb590a105619dca3c3 # v4.4.2
- name: Publish package
run: ./gradlew publish
env:
MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }}
MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
このワークフローは以下のステップを実行します。
-
プロジェクトのリポジトリのコピーをチェックアウトします。
-
Java JDKをセットアップします。
-
Gradle 環境を設定します。
gradle/actions/setup-gradleアクションは 、ワークフロー実行間のキャッシュ状態を処理し、すべての Gradle 実行の詳細な概要を提供します。 -
`publish` Maven リポジトリと GitHub Packages に公開するには、Gradle `OSSRH` タスクを実行します。 `MAVEN_USERNAME` 環境変数には `OSSRH_USERNAME` シークレットの内容が設定され、`MAVEN_PASSWORD` 環境変数には `OSSRH_TOKEN` シークレットの内容が設定されます。 `GITHUB_TOKEN` 環境変数には、`GITHUB_TOKEN` シークレットの内容が設定されます。 `permissions` キーでは、`GITHUB_TOKEN` シークレットによって許可されるアクセス権を指定します。ワークフローでのシークレットの使用について詳しくは、「GitHub Actions でのシークレットの使用」をご覧ください。