はじめに
このガイドは、JavaのパッケージをGitHub PackagesやMaven Central Repositoryに公開するワークフローの作成方法を紹介します。 1つのワークフローで、パッケージを1つのリポジトリあるいは複数のリポジトリに公開できます。
警告
このガイドで使われている例は、レガシ OSSRH サービスを参照しています。 Maven Central リポジトリ ドキュメントの「Publishing」(公開) を参照してください。
前提条件
ワークフローファイルと設定オプションに関する基本的な理解をしておくことをおすすめします。 詳しくは、「ワークフローの書き込み」をご覧ください。
Maven を使用してJava プロジェクトの CI ワークフローを作成する方法の詳細については、「Maven を使用した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)
パッケージの設定について
`groupId` ファイル内の `artifactId` および __ フィールドは、パッケージをレジストリにリンクするためにレジストリが使用するパッケージの一意の識別子を作成します。 詳細については、Apache Maven ドキュメントの「[Guide to uploading artifacts to the Central Repository](https://maven.apache.org/repository/guide-central-repository-upload.html)」(セントラル リポジトリに成果物をアップロードするためのガイド) を参照してください。
警告
Apache Maven パッケージは名前付け規則に従う必要があるため、artifactId フィールドには小文字、数字、またはハイフンのみを含める必要があります。 詳細については、maven.apache.org ドキュメントの「Naming convention of Maven coordinates」(Maven 座標の名前付け規則) を参照してください。 成果物の名前に大文字を使うと、422 Unprocessable Entity という応答が返されます。
_pom.xml_ ファイルには、Maven がパッケージをデプロイするディストリビューション管理リポジトリの構成も含まれています。 各リポジトリは、名前とデプロイメントURLを持たなければなりません。 これらのリポジトリの認証は、Maven を実行しているユーザーのホーム ディレクトリにある _.m2/settings.xml_ ファイルで構成できます。
この setup-java アクションを使用して、デプロイ リポジトリと、そのリポジトリの認証を構成できます。 詳細については、「setup-java」を参照してください。
Maven Central Repositoryへのパッケージの公開
新しいリリースを作成するたびに、パッケージを公開するワークフローを起動できます。 次の例のワークフローでは、release イベントが created 型でトリガーされたときに実行されます。 このワークフローは、CIテストをパスすればMaven Central Repositoryにパッケージを公開します。
release イベントの詳細については、「ワークフローをトリガーするイベント」を参照してください。
このワークフローでは、setup-java アクションを使用できます。 このアクションにより、特定のバージョンの JDK が PATH にインストールされますが、パッケージを発行するための Maven settings.xml も構成されます。 デフォルトでは、設定ファイルはGitHub Packagesに対して設定されますが、Maven Central Repositoryなどの他のパッケージレジストリにデプロイするようにも設定できます。
pom.xml で既にディストリビューション管理リポジトリが構成されている場合は、id アクションの呼び出し時にその setup-java を指定できます。
たとえば、OSSRH ホスティング プロジェクトを使用して Maven セントラル リポジトリにデプロイする場合、pom.xml は id の ossrh を持つディストリビューション管理リポジトリを指定できます。
<project ...>
...
<distributionManagement>
<repository>
<id>ossrh</id>
<name>Central Repository OSSRH</name>
<url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
</repository>
</distributionManagement>
</project>
<project ...>
...
<distributionManagement>
<repository>
<id>ossrh</id>
<name>Central Repository OSSRH</name>
<url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
</repository>
</distributionManagement>
</project>
この構成では、リポジトリ管理 id を setup-java アクションに指定することで、Maven セントラル リポジトリにパッケージを発行するワークフローを作成できます。 リポジトリの認証のために、ユーザ名とパスワードを含む環境変数を提供する必要もあります。
デプロイのステップでは、リポジトリに認証してもらうユーザ名と、認証のためのパスワードあるいはトークンで設定したシークレットを環境変数に設定する必要があります。 詳しくは、「GitHub Actions でのシークレットの使用」をご覧ください。
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 Maven Central Repository
uses: actions/setup-java@v4
with:
java-version: '11'
distribution: 'temurin'
server-id: ossrh
server-username: MAVEN_USERNAME
server-password: MAVEN_PASSWORD
- name: Publish package
run: mvn --batch-mode deploy
env:
MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }}
MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }}
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 Maven Central Repository
uses: actions/setup-java@v4
with:
java-version: '11'
distribution: 'temurin'
server-id: ossrh
server-username: MAVEN_USERNAME
server-password: MAVEN_PASSWORD
- name: Publish package
run: mvn --batch-mode deploy
env:
MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }}
MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }}
このワークフローは以下のステップを実行します。
-
プロジェクトのリポジトリをチェックアウトしてコピーを取得します。
-
Java JDK を設定し、maven settings.xml ファイルを構成して、
ossrhおよびMAVEN_USERNAME環境変数を使用して、MAVEN_PASSWORDリポジトリの認証を追加します。 -
ossrhリポジトリに公開するには、mvn --batch-mode deployコマンドを実行します。MAVEN_USERNAME環境変数にはOSSRH_USERNAMEシークレットの内容が設定され、MAVEN_PASSWORD環境変数にはOSSRH_TOKENシークレットの内容が設定されます。ワークフローでのシークレットの使用について詳しくは、「GitHub Actions でのシークレットの使用」をご覧ください。
GitHub Packagesへのパッケージの公開
新しいリリースを作成するたびに、パッケージを公開するワークフローを起動できます。 次の例のワークフローでは、release イベントが created 型でトリガーされたときに実行されます。 このワークフローは、CIテストをパスすればGitHub Packagesにパッケージを公開します。
release イベントの詳細については、「ワークフローをトリガーするイベント」を参照してください。
このワークフローでは、setup-java アクションを使用できます。 このアクションにより、特定のバージョンの JDK が PATH にインストールされ、パッケージを GitHub Packages に発行するための Maven settings.xml も設定されます。 生成された settings.xml では、id 環境変数をユーザー名として、github 環境変数をパスワードとして使用し、GITHUB_ACTOR の GITHUB_TOKEN を使用してサーバーの認証を定義します。
GITHUB_TOKEN 環境変数には、特別な GITHUB_TOKEN シークレットの値が割り当てられます。
ワークフロー内のジョブが開始されるたびに、GITHUB_TOKEN シークレットはそのリポジトリのアクセス トークンに設定されます。 ワークフロー ファイルでこのアクセス トークンにアクセス許可を設定して、contents アクセス許可に対する読み取りアクセスと、packages アクセス許可に対する書き込みアクセスを付与する必要があります。 詳しくは、「ワークフローでの認証に GITHUB_TOKEN を使用する」をご覧ください。
Maven ベースのプロジェクトの場合は、__ の id を使用して GitHub Packages エンドポイントを指すディストリビューション リポジトリを github ファイルに作成することで、これらの設定を利用できます。
たとえば、組織の名前が "octocat" で、リポジトリの名前が "hello-world" の場合、pom.xml の GitHub Packages 構成は次の例のようになります。
<project ...>
...
<distributionManagement>
<repository>
<id>github</id>
<name>GitHub Packages</name>
<url>https://maven.pkg.github.com/octocat/hello-world</url>
</repository>
</distributionManagement>
</project>
<project ...>
...
<distributionManagement>
<repository>
<id>github</id>
<name>GitHub Packages</name>
<url>https://maven.pkg.github.com/octocat/hello-world</url>
</repository>
</distributionManagement>
</project>
この構成では、自動的に生成された settings.xml を使用して、パッケージを GitHub Packages に発行するワークフローを作成できます。
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: Publish package
run: mvn --batch-mode deploy
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
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: Publish package
run: mvn --batch-mode deploy
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
このワークフローは以下のステップを実行します。
-
プロジェクトのリポジトリをチェックアウトしてコピーを取得します。
-
Java JDK を設定し、maven settings.xml ファイルを自動的に構成して、
githubMaven リポジトリの認証を追加して、GITHUB_TOKEN環境変数を使用します。 -
mvn --batch-mode deployコマンドを実行して、GitHub Packages に公開します。GITHUB_TOKEN環境変数には、GITHUB_TOKENシークレットの内容が設定されます。permissionsキーには、GITHUB_TOKENに付与されているアクセス権を指定します。ワークフローでのシークレットの使用について詳しくは、「GitHub Actions でのシークレットの使用」をご覧ください。
Maven Central RepositoryとGitHub Packagesへのパッケージの公開
各レジストリの setup-java アクションを使用して、Maven セントラル リポジトリと GitHub Packages の両方にパッケージを発行できます。
_pom.xml_ ファイルに、GitHub リポジトリと Maven セントラル リポジトリ プロバイダーの両方のディストリビューション管理リポジトリが含まれている必要があります。 たとえば、OSSRH ホスティング プロジェクトを使用してセントラル リポジトリにデプロイする場合は、`id` を `ossrh` に設定してディストリビューション管理リポジトリで指定し、`id` を `github` に設定してディストリビューション管理リポジトリで GitHub Packages を指定できます。
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 for publishing to Maven Central Repository
uses: actions/setup-java@v4
with:
java-version: '11'
distribution: 'temurin'
server-id: ossrh
server-username: MAVEN_USERNAME
server-password: MAVEN_PASSWORD
- name: Publish to the Maven Central Repository
run: mvn --batch-mode deploy
env:
MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }}
MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }}
- name: Set up Java for publishing to GitHub Packages
uses: actions/setup-java@v4
with:
java-version: '11'
distribution: 'temurin'
- name: Publish to GitHub Packages
run: mvn --batch-mode deploy
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
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 for publishing to Maven Central Repository
uses: actions/setup-java@v4
with:
java-version: '11'
distribution: 'temurin'
server-id: ossrh
server-username: MAVEN_USERNAME
server-password: MAVEN_PASSWORD
- name: Publish to the Maven Central Repository
run: mvn --batch-mode deploy
env:
MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }}
MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }}
- name: Set up Java for publishing to GitHub Packages
uses: actions/setup-java@v4
with:
java-version: '11'
distribution: 'temurin'
- name: Publish to GitHub Packages
run: mvn --batch-mode deploy
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
このワークフローでは、setup-java アクションを 2 回呼び出します。
setup-java アクションが実行されるたびに、パッケージを発行するための Maven settings.xml ファイルが上書きされます。 リポジトリに対する認証の場合、settings.xml ファイルはディストリビューション管理リポジトリ id とユーザー名とパスワードを参照します。
このワークフローは以下のステップを実行します。
-
プロジェクトのリポジトリをチェックアウトしてコピーを取得します。
-
初回の
setup-javaの呼び出しを行います。 これにより、__ リポジトリの Mavenossrhファイルが構成され、次の手順で定義されている環境変数に認証オプションが設定されます。 -
ossrhリポジトリに公開するには、mvn --batch-mode deployコマンドを実行します。MAVEN_USERNAME環境変数にはOSSRH_USERNAMEシークレットの内容が設定され、MAVEN_PASSWORD環境変数にはOSSRH_TOKENシークレットの内容が設定されます。 -
2 回目の
setup-javaの呼び出しを行います。 これにより、GitHub Packages の Maven settings.xml ファイルが自動的に構成されます。 -
mvn --batch-mode deployコマンドを実行して、GitHub Packages に公開します。GITHUB_TOKEN環境変数には、GITHUB_TOKENシークレットの内容が設定されます。permissionsキーには、GITHUB_TOKENに付与されているアクセス権を指定します。ワークフローでのシークレットの使用について詳しくは、「GitHub Actions でのシークレットの使用」をご覧ください。