Skip to main content
We publish frequent updates to our documentation, and translation of this page may still be in progress. For the most current information, please visit the English documentation.

Building and testing Java with Maven

You can create a continuous integration (CI) workflow in GitHub Actions to build and test your Java project with Maven.

Введение

В этом руководстве показано, как создать рабочий процесс, который выполняет непрерывную интеграцию (CI) для вашего проекта Java с помощью средства управления проектами программного обеспечения Maven. Создаваемый рабочий процесс позволит увидеть, когда фиксации в запросе на вытягивание вызывают сбои в сборке или тестировании ветви по умолчанию; этот подход поможет убедиться, что ваш код всегда работоспособен. Вы можете расширить рабочий процесс CI, чтобы кэшировать файлы и передавать артефакты через выполнение рабочего процесса.

Средства выполнения, размещенные на GitHub, имеют кэш средств с предварительно установленным программным обеспечением, включающим в себя комплекты SDK для Java (JDK) и Maven. Список программного обеспечения и предварительно установленных версий для JDK и Maven см. в разделе About GitHub-hosted runners.

Предварительные требования

Требуются знания YAML и синтаксиса GitHub Actions. Дополнительные сведения см. в разделе:

Рекомендуется иметь базовое представление о Java и платформе Maven. Дополнительные сведения см. в руководстве по началу работы с Maven в документации Maven.

Использование начального рабочего процесса Maven

GitHub предоставляет начальный рабочий процесс Maven, который будет работать для большинства проектов Java на базе Maven. Дополнительные сведения см. в разделе Начальный рабочий процесс Maven.

Чтобы быстро приступить к работе, при создании рабочего процесса можно выбрать предварительно настроенный начальный рабочий процесс Maven. Дополнительные сведения см. в разделе Quickstart for GitHub Actions.

Этот рабочий процесс также можно добавить вручную, создав новый файл в каталоге .github/workflows репозитория.

YAML
name: Java CI

on: [push]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v3
      - name: Set up JDK 17
        uses: actions/setup-java@v3
        with:
          java-version: '17'
          distribution: 'temurin'
      - name: Build with Maven
        run: mvn --batch-mode --update-snapshots package

Этот рабочий процесс выполняет следующие действия:

  1. На шаге checkout в средство выполнения скачивается копия репозитория.
  2. На setup-java этом шаге настраивается Eclipse Temurin (Java) JDK 17 от Eclipse Adoptium.
  3. На шаге "Сборка с помощью Maven" целевой объект Maven package запускается в неинтерактивном режиме для проверки того, что сборка кода выполняется, тесты завершаются удачно и пакет можно создать.

Начальные рабочие процессы по умолчанию — это отличные отправные точки при создании рабочего процесса сборки и тестирования, а также начальный рабочий процесс можно настроить в соответствии с потребностями проекта.

Выполнение заданий в другой операционной системе

Начальный рабочий процесс настраивает задания для запуска в Linux с помощью размещенных в GitHub средств выполнения ubuntu-latest. Можно изменить ключ runs-on для выполнения заданий в другой операционной системе. Например, можно использовать размещенные в GitHub средства выполнения Windows.

runs-on: windows-latest

Кроме этого, можно выполнять задания на размещенных в GitHub средствах выполнения macOS.

runs-on: macos-latest

Можно также выполнять задания в контейнерах Docker или предоставить локальное средство выполнения, которое выполняется в собственной инфраструктуре. Дополнительные сведения см. в разделе Workflow syntax for GitHub Actions.

Указание версии и архитектуры JVM

Начальный рабочий процесс настраивает PATH, чтобы содержать OpenJDK 8 для платформы x64. Если вы хотите использовать другую версию Java или выбрать другую архитектуру (x64 или x86), можно использовать действие setup-java для выбора другой среды выполнения Java.

Например, чтобы использовать JDK версии 11, предоставляемой Adoptium для платформы x64, можно выполнить действие setup-java и установить параметры java-version,distribution и architecture на '11', 'adopt' и x64.

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

Дополнительные сведения см. в описании действия setup-java.

Создание и тестирование кода

Вы можете использовать те же команды, которые используются для создания и тестирования кода в локальной среде.

Начальный рабочий процесс будет по умолчанию запускать целевой объект package. В конфигурации Maven по умолчанию эта команда скачивает зависимости, выполняет сборку классов, проводит тесты и упаковывает классы в распространяемый формат, например в JAR-файл.

Если вы используете другие команды для сборки проекта или хотите выполнить другой целевой объект, это можно указать. Например, может понадобиться выполнить целевой объект verify, настроенный в файле pom-ci.xml.

YAML
steps:
  - uses: actions/checkout@v3
  - uses: actions/setup-java@v3
    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@v3
  - name: Set up JDK 11
    uses: actions/setup-java@v3
    with:
      java-version: '17'
      distribution: 'temurin'
      cache: maven
  - name: Build with Maven
    run: mvn --batch-mode --update-snapshots verify

Этот рабочий процесс сохраняет содержимое локального репозитория Maven, расположенного в каталоге .m2 домашнего каталога средства выполнения. Ключом кэша будет хэш содержимого файла pom.xml, поэтому изменения в файле pom.xml делают кэш недействительным.

Упаковка данных рабочего процесса в виде артефактов

После успешной сборки и прохождения тестов может потребоваться передать полученные пакеты Java в виде артефакта сборки. Полученные пакеты будут храниться как часть выполнения рабочего процесса и их можно будет скачать. Артефакты помогут вам протестировать и отладить запросы на вытягивание в локальной среде до их слияния. Дополнительные сведения см. в разделе Storing workflow data as artifacts.

Как правило, Maven создает выходные файлы, такие как JAR, EAR или WAR, в каталоге target. Чтобы передать их как артефакты, их можно скопировать в новый каталог, содержащий артефакты для отправки. Например, можно создать каталог с именем staging. Затем содержимое этого каталога можно передать с помощью действия upload-artifact.

YAML
steps:
  - uses: actions/checkout@v3
  - uses: actions/setup-java@v3
    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