# Создание и тестирование Java с Maven

Узнайте, как создать рабочий процесс непрерывной интеграции (CI) в GitHub Actions, чтобы создать и протестировать свой Java-проект с Maven.

> \[!NOTE]
> GitHub Enterprise Serverразмещенные в данный момент средства выполнения не поддерживаются в GitHub.

## Введение

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

GitHub-размещенные средства запуска имеют кэш средств с предварительно установленным программным обеспечением, которое включает в себя Java комплекты средств разработки (JDKs) и Maven. Список программного обеспечения и предварительно установленных версий JDK и Maven см. в разделе [Средства выполнения тестов, размещенные в GitHub](/ru/enterprise-server@3.22/actions/concepts/runners/github-hosted-runners#preinstalled-software-for-github-owned-images).

## Необходимые компоненты

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

* [Синтаксис рабочего процесса для GitHub Actions](/ru/enterprise-server@3.22/actions/reference/workflows-and-actions/workflow-syntax)
* [Написание рабочих процессов](/ru/enterprise-server@3.22/actions/how-tos/write-workflows)

Рекомендуем иметь базовое понимание Java и фреймворка Maven. Дополнительные сведения см. в [руководстве по началу работы с Maven](https://maven.apache.org/guides/getting-started/index.html) в документации Maven.

### Использование локальных средств выполнения GitHub Enterprise Server

При использовании действий установки (например `actions/setup-LANGUAGE`) GitHub Enterprise Server с локальными средствами выполнения, возможно, потребуется настроить кэш средств на запусках, у которых нет доступа к Интернету. Дополнительные сведения см. в разделе [Настройка кэша инструментов для локально размещенных средств выполнения без доступа к Интернету](/ru/enterprise-server@3.22/admin/managing-github-actions-for-your-enterprise/managing-access-to-actions-from-githubcom/setting-up-the-tool-cache-on-self-hosted-runners-without-internet-access).

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

Чтобы быстро приступить к работе, добавьте шаблон рабочего процесса в `.github/workflows` каталог репозитория.

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

1. На GitHubперейдите на главную страницу репозитория.

2. Под именем репозитория щелкните **<svg version="1.1" width="16" height="16" viewBox="0 0 16 16" class="octicon octicon-play" aria-label="play" role="img"><path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Zm4.879-2.773 4.264 2.559a.25.25 0 0 1 0 .428l-4.264 2.559A.25.25 0 0 1 6 10.559V5.442a.25.25 0 0 1 .379-.215Z"></path></svg> Actions**.

   ![Снимок экрана: вкладки для репозитория github/docs. Вкладка "Действия" выделена оранжевым контуром.](/assets/images/help/repository/actions-tab-global-nav-update.png)

3. Если в вашем репозитории уже используется рабочий процесс, нажмите кнопку **Создать рабочий процесс**.

4. На странице "Выбор рабочего процесса" показан выбор рекомендуемых шаблонов рабочих процессов. Поискайте «Java с Maven».

5. В рабочем процессе «Java с Maven» нажмите **Configure**.

   Если вы не нашли шаблон рабочего процесса «Java с Maven», скопируйте следующий код рабочего процесса в новый файл под названием `maven.yml` в каталоге `.github/workflows` вашего репозитория.

   ```yaml copy
   # Этот рабочий процесс использует действия, которые не сертифицированы GitHub.
   # Они предоставляются сторонним поставщиком, и на них распространяются
   # отдельные условия обслуживания, политика конфиденциальности и поддержка
   # документации.
   name: Java CI with Maven

   on:
     push:
       branches: [ "main" ]
     pull_request:
       branches: [ "main" ]

   jobs:
     build:
       runs-on: ubuntu-latest

       steps:
       - uses: actions/checkout@v6
       - 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
   ```

6. Измените рабочий процесс по мере необходимости. Например, измените версию Java.

7. Щелкните **Зафиксировать изменения**.

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

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

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

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

Дополнительные сведения см. в описании действия [`setup-java`](https://github.com/actions/setup-java).

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

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

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

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

```yaml copy
steps:
  - uses: actions/checkout@v6
  - 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`](https://github.com/marketplace/actions/setup-java-jdk), либо можно использовать [действие `cache`](https://github.com/actions/cache) для более сложной настройки.

```yaml copy
steps:
  - uses: actions/checkout@v6
  - 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
```

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

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

После успешной работы сборки и прохождения тестов, возможно, стоит загрузить полученные пакеты Java как артефакт сборки. Полученные пакеты будут храниться как часть выполнения рабочего процесса и их можно будет скачать. Артефакты помогут вам протестировать и отладить запросы на вытягивание в локальной среде до их слияния. Дополнительные сведения см. в разделе [Хранение и предоставление общего доступа к данным с артефактами рабочего процесса](/ru/enterprise-server@3.22/actions/tutorials/store-and-share-data).

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

```yaml copy
steps:
  - uses: actions/checkout@v6
  - 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
```