はじめに
このガイドは、ソフトウェアプロジェクト管理ツールのMavenを使ってJavaのプロジェクトのための継続的インテグレーション(CI)を実行するワークフローを作成する方法を紹介します。 作成するワークフローによって、プルリクエストに対するコミットがデフォルトブランチに対してビルドあるいはテストの失敗を引き起こしたことを見ることができるようになります。このアプローチは、コードが常に健全であることを保証するための役に立ちます。 CIワークフローをキャッシュ ファイルに拡張して、ワークフローの実行による成果物をアップロードするようにもできます。
GitHub ホステッド ランナーにはプリインストールされたソフトウェアのあるツール キャッシュがあり、Java 開発キット (JDK)、Maven が含まれています。 JDK と Maven に関するソフトウェアとプレインストールされたバージョンの一覧については、「GitHub ホステッド ランナー」を参照してください。
前提条件
YAMLとGitHub Actionsの構文に馴染んでいる必要があります。 詳細については、以下を参照してください:
Java及びMavenフレームワークの基本的な理解をしておくことをおすすめします。 詳細については、Maven ドキュメントの Maven 使用開始ガイドに関するページを参照してください。
Maven ワークフロー テンプレートの使用
すぐに開始するには、リポジトリの .github/workflows ディレクトリにワークフロー テンプレートを追加します。
GitHub には、ほとんどの Maven プロジェクトの Java で動作する Maven 用のワークフロー テンプレートが用意されています。 このガイドの以降のセクションでは、このワークフロー テンプレートをカスタマイズする方法の例を示します。
- 
GitHub で、リポジトリのメイン ページに移動します。 
- 
リポジトリ名の下にある [ Actions] をクリックします。 !["github/docs" リポジトリのタブのスクリーンショット。 [アクション] タブがオレンジ色の枠線で強調表示されています。](/assets/cb-12958/images/help/repository/actions-tab-global-nav-update.png) 
- 
ワークフローが既にリポジトリ内にある場合は、 [新しいワークフロー] をクリックします。 
- 
[ワークフローの選択] ページには、推奨されるワークフロー テンプレートの選択が表示されます。 「Java with Maven」を検索します。 
- 
"Java with Maven" ワークフローで、[構成] をクリックします。 
- 
必要に応じてワークフローを編集します。 たとえば、Java のバージョンを変更します。 
- 
[変更をコミットする] をクリックします。 
maven.yml ワークフロー ファイルがリポジトリの .github/workflows ディレクトリに追加されます。
Javaのバージョンとアーキテクチャの指定
ワークフロー テンプレートで x64 プラットフォーム用の OpenJDK 8 を含むように PATH を設定します。 異なるバージョンの Java を使用する場合、あるいは異なるアーキテクチャ (x64 または x86) をターゲットとする場合、setup-java アクションを使って異なる Java ランタイム環境を選択できます。
たとえば、x64 プラットフォームに対して Adoptium によって提供される JDK のバージョン 11 を使用するには、setup-java アクションを使用して、java-version、distribution、architecture パラメーターを '11'、'temurin'、x64 に設定します。
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
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ファイルのような配布可能なフォーマットにクラスをパッケージします。
プロジェクトのビルドに異なるコマンドを使ったり、異なるターゲットを使いたいのであれば、それらを指定できます。 たとえば、pom-ci.xml ファイルで構成されている verify ターゲットを実行できます。
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
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 アクションを使用することもできます。
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
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 アクションを使用して、そのディレクトリの内容をアップロードできます。
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@v4
    with:
      name: Package
      path: staging
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@v4
    with:
      name: Package
      path: staging