Skip to main content

このバージョンの GitHub Enterprise サーバーはこの日付をもって終了となります: 2026-03-17. 重大なセキュリティの問題に対してであっても、パッチリリースは作成されません。 パフォーマンスの向上、セキュリティの向上、新機能の向上を図るために、最新バージョンの GitHub Enterprise サーバーにアップグレードしてください。 アップグレードに関するヘルプについては、GitHub Enterprise サポートにお問い合わせください

Maven を使用したJavaのビルドとテスト

Maven を使用してJava プロジェクトをビルドしてテストするために、GitHub Actionsで継続的インテグレーション (CI) ワークフローを作成する方法について説明します。

メモ

GitHub ホステッド ランナーは、現在 GitHub Enterprise Server ではサポートされていません。

はじめに

このガイドでは、Maven ソフトウェア プロジェクト管理ツールを使用して、Java プロジェクトの継続的インテグレーション (CI) を実行するワークフローを作成する方法について説明します。 作成するワークフローによって、プルリクエストに対するコミットがデフォルトブランチに対してビルドあるいはテストの失敗を引き起こしたことを見ることができるようになります。このアプローチは、コードが常に健全であることを保証するための役に立ちます。 CIワークフローをキャッシュ ファイルに拡張して、ワークフローの実行による成果物をアップロードするようにもできます。

GitHubホストランナーには、Java開発キット (JDK) と Maven を含む、プレインストールされたソフトウェアを含むツール キャッシュがあります。 JDK と Maven に関するソフトウェアとプレインストールされたバージョンの一覧については、「GitHub ホステッド ランナー」を参照してください。

前提条件

YAMLとGitHub Actionsの構文に馴染んでいる必要があります。 詳細については、以下を参照してください: * GitHub Actions のワークフロー構文 * ワークフローの書き込み

Javaと Maven フレームワークの基本的な理解をお勧めします。 詳細については、Maven ドキュメントの Maven 使用開始ガイドに関するページを参照してください。

GitHub Enterprise Server上でのセルフホストランナーの利用

GitHub Enterprise Server でセルフホスト ランナーと合わせてセットアップ アクション (actions/setup-LANGUAGE など) を使用するときに、インターネットにアクセスできないランナー上にツール キャッシュを設定する必要がある場合があります。 詳しくは、「インターネットにアクセスできないセルフホストランナーにツールキャッシュを設定する」をご覧ください。

Maven ワークフロー テンプレートの使用

すぐに開始するには、リポジトリの .github/workflows ディレクトリにワークフロー テンプレートを追加します。

GitHub には、Maven プロジェクトを使用するほとんどのJavaで動作する Maven 用のワークフロー テンプレートが用意されています。 このガイドの以降のセクションでは、このワークフロー テンプレートをカスタマイズする方法の例を示します。

  1. GitHub で、リポジトリのメイン ページに移動します。1. リポジトリ名の下にある [ Actions] をクリックします。

    "github/docs" リポジトリのタブのスクリーンショット。 [アクション] タブがオレンジ色の枠線で強調表示されています。
    1. ワークフローが既にリポジトリ内にある場合は、 [新しいワークフロー] をクリックします。

  2. [ワークフローの選択] ページには、推奨されるワークフロー テンプレートの選択が表示されます。 "Maven でJava" を検索します。

  3. "Maven を使用したJava" ワークフローで、Configure をクリックします。

    "Maven を使用したJava" ワークフロー テンプレートが見つからない場合は、次のワークフロー コードを、リポジトリの maven.yml ディレクトリにある .github/workflows という新しいファイルにコピーします。

    YAML
    # このワークフローはGitHubによって認定されていないアクションを使用します。
    # それらはサードパーティによって提供され、
    # 別個の利用規約、プライバシーポリシー、
    # ドキュメントを参照してください。
    name: Java CI with Maven
    
    on:
      push:
        branches: [ "main" ]
      pull_request:
        branches: [ "main" ]
    
    jobs:
      build:
        runs-on: ubuntu-latest
    
        steps:
        - uses: actions/checkout@v5
        - name: Set up JDK 17
          uses: actions/setup-java@v4
          with:
            java-version: '17'
            distribution: 'temurin'
            cache: maven
        - name: Build with Maven
          run: mvn -B package --file pom.xml
    
        # Optional: Uploads the full dependency graph to GitHub to improve the quality of Dependabot alerts this repository can receive
        - name: Update dependency graph
          uses: advanced-security/maven-dependency-submission-action@571e99aab1055c2e71a1e2309b9691de18d6b7d6
    
  4. 必要に応じてワークフローを編集します。 たとえば、Javaバージョンを変更します。

  5.        **[Commit changes]** をクリックします。
    

Javaのバージョンとアーキテクチャの指定

ワークフロー テンプレートで x64 プラットフォーム用の OpenJDK 8 を含むように PATH を設定します。 異なるバージョンの Java を使用する場合、あるいは異なるアーキテクチャ (x64 または x86) をターゲットとする場合、setup-java アクションを使って異なる Java ランタイム環境を選択できます。

たとえば、x64 プラットフォームに対して Adoptium によって提供される JDK のバージョン 11 を使用するには、setup-java アクションを使用して、java-versiondistributionarchitecture パラメーターを '11''temurin'x64 に設定します。

YAML
steps:
  - uses: actions/checkout@v5
  - name: Set up JDK 11 for x64
    uses: actions/setup-java@v4
    with:
      java-version: '11'
      distribution: 'temurin'
      architecture: x64

詳細については、「setup-java アクション」を参照してください。

コードのビルドとテスト

ローカルで使うのと同じコマンドを、コードのビルドとテストに使えます。

ワークフロー テンプレートでは、既定で package ターゲットが実行されます。 デフォルトのMavenの設定では、このコマンドは依存関係をダウンロードし、クラスをビルドし、テストを実行し、たとえばJARファイルのような配布可能なフォーマットにクラスをパッケージします。

プロジェクトのビルドに異なるコマンドを使ったり、異なるターゲットを使いたいのであれば、それらを指定できます。 たとえば、verify ファイルで構成されている pom-ci.xml ターゲットを実行できます。

YAML
steps:
  - uses: actions/checkout@v5
  - uses: actions/setup-java@v4
    with:
      java-version: '17'
      distribution: 'temurin'
  - name: Run the Maven verify phase
    run: mvn --batch-mode --update-snapshots verify

依存関係のキャッシング

ワークフローの実行速度を上げるために、依存関係をキャッシュすることもできます。 実行に成功すると、ローカルの Maven リポジトリはキャッシュに格納されます。 その後のワークフローの実行では、キャッシュがリストアされ、依存関係をリモートのMavenリポジトリからダウンロードする必要がなくなります。 setup-java アクションを使用するだけで依存関係をキャッシュすることも、カスタム構成や高度な構成に対して cache アクションを使用することもできます。

YAML
steps:
  - uses: actions/checkout@v5
  - name: Set up JDK 17
    uses: actions/setup-java@v4
    with:
      java-version: '17'
      distribution: 'temurin'
      cache: maven
  - name: Build with Maven
    run: mvn --batch-mode --update-snapshots verify

このワークフローでは、ランナーのホーム ディレクトリの .m2 ディレクトリにあるローカル Maven リポジトリの内容が保存されます。 キャッシュ キーは pom.xml ハッシュされた内容であるため、pom.xml を変更するとキャッシュは無効になります。

成果物としてのワークフローのデータのパッケージ化

ビルドが成功し、テストが成功したら、結果のJava パッケージをビルド成果物としてアップロードできます。 そうすれば、ビルドされたパッケージをワークフローの実行の一部として保存することになり、それらをダウンロードできるようになります。 アーティファクトを利用して、Pull Requestをマージする前にローカル環境でテストとデバッグを行うことができます。 詳しくは、「ワークフロー成果物を使ったデータの格納と共有」をご覧ください。

Maven では、通常、JAR、EAR、WAR のような出力ファイルが target ディレクトリに作成されます。 それらを成果物としてアップロードするために、アップロードする成果物を含む新しいディレクトリにそれらをコピーできます。 たとえば、staging というディレクトリを作成できます。 その後、upload-artifact アクションを使用して、そのディレクトリの内容をアップロードできます。

YAML
steps:
  - uses: actions/checkout@v5
  - uses: actions/setup-java@v4
    with:
      java-version: '17'
      distribution: 'temurin'
  - run: mvn --batch-mode --update-snapshots verify
  - run: mkdir staging && cp target/*.jar staging
  - uses: actions/upload-artifact@v3
    with:
      name: Package
      path: staging