Skip to main content

Criar e testar o Java com o Maven

Você pode criar um fluxo de trabalho de integração contínua (CI) no GitHub Actions para criar e testar o seu projeto Java com o Maven.

Introdução

Este guia mostra como criar um fluxo de trabalho que realiza a integração contínua (CI) para o seu projeto Java usando a ferramenta de gerenciamento de projeto do software Maven. O fluxo de trabalho que você criar permitirá que você veja quando commits em um pull request gerarão falhas de criação ou de teste em comparação com o seu branch-padrão. Essa abordagem pode ajudar a garantir que seu código seja sempre saudável. Você pode estender seu fluxo de trabalho de CI para arquivos de cache e carregar artefatos de uma execução do fluxo de trabalho.

Os executores hospedados no GitHub têm um cache de ferramentas com programas de software pré-instalados, que inclui os JDKs (Java Development Kits) e o Maven. Para obter uma lista de software e as versões pré-instaladas para JDK e Maven, confira "Using GitHub-hosted runners".

Pré-requisitos

Você deve estar familiarizado com o YAML e a sintaxe do GitHub Actions. Para obter mais informações, consulte:

Recomendamos que você tenha um entendimento básico da estrutura do Java e do Maven. Para obter mais informações, confira o Guia de Introdução do Maven na documentação do Maven.

Usando o fluxo de trabalho inicial do Maven

GitHub fornece um fluxo de trabalho inicial do Maven que funcionará para a maioria dos projetos Java baseados no Maven. Para obter mais informações, confira o fluxo de trabalho inicial do Maven.

Para começar rapidamente, você pode escolher o fluxo de trabalho inicial pré-configurado do Maven ao criar um novo fluxo de trabalho. Para obter mais informações, confira "Início rápido para GitHub Actions".

Adicione também esse fluxo de trabalho manualmente criando um arquivo no diretório .github/workflows do repositório.

YAML
name: Java CI

Nome do fluxo de trabalho. O GitHub exibe os nomes dos fluxos de trabalho na guia "Ações" do repositório. Se você omitir name, o GitHub exibirá o caminho do arquivo de fluxo de trabalho em relação à raiz do repositório.

on: [push]
jobs:
  build:
    runs-on: ubuntu-latest

Você pode executar esse fluxo de trabalho usando um sistema operacional diferente.

O fluxo de trabalho inicial configura os trabalhos a serem executados no Linux usando os executores ubuntu-latest hospedados no GitHub. É possível alterar a chave runs-on para executar seus trabalhos em outro sistema operacional.

Por exemplo, você pode usar os executores Windows hospedados no GitHub especificando runs-on: windows-latest. Ou você pode executar os executores macOS hospedados no GitHub usando runs-on: macos-latest.

Você também pode executar tarefas em contêineres Docker ou fornecer um executor de auto-hospedagem que funciona na sua própria infraestrutura. Para obter mais informações, confira "Sintaxe de fluxo de trabalho para o GitHub Actions".

    steps:
      - uses: actions/checkout@v4

Esta etapa usa a ação actions/checkout para fazer download de uma cópia do repositório no executor.

      - name: Set up JDK 17
        uses: actions/setup-java@v3
        with:
          java-version: '17'
          distribution: 'temurin'

Esta etapa usa a ação actions/setup-java para configurar o JDK do Eclipse Temurin (Java) 17 do Eclipse Adoptium.

      - name: Build with Maven
        run: mvn --batch-mode --update-snapshots package

The "Build with Maven" step runs the Maven package target in non-interactive mode to ensure that your code builds, tests pass, and a package can be created.

# Nome do fluxo de trabalho. O GitHub exibe os nomes dos fluxos de trabalho na guia "Ações" do repositório. Se você omitir `name`, o GitHub exibirá o caminho do arquivo de fluxo de trabalho em relação à raiz do repositório.
name: Java CI

#
on: [push]
#
jobs:
  build:

    # <!-- This is a YAML comment for use in annotated code examples. -->
    # Você pode executar esse fluxo de trabalho usando um sistema operacional diferente.
    #
    # O fluxo de trabalho inicial configura os trabalhos a serem executados no Linux usando os executores `ubuntu-latest` hospedados no GitHub. É possível alterar a chave `runs-on` para executar seus trabalhos em outro sistema operacional.
    #
    # Por exemplo, você pode usar os executores Windows hospedados no GitHub especificando `runs-on: windows-latest`. Ou você pode executar os executores macOS hospedados no GitHub usando `runs-on: macos-latest`.
    #
    # Você também pode executar tarefas em contêineres Docker ou fornecer um executor de auto-hospedagem que funciona na sua própria infraestrutura. Para obter mais informações, confira "[AUTOTITLE](/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idruns-on)".
    runs-on: ubuntu-latest
#
    steps:
      # Esta etapa usa a ação `actions/checkout` para fazer download de uma cópia do repositório no executor.
      - uses: actions/checkout@v4
      # Esta etapa usa a ação `actions/setup-java` para configurar o JDK do Eclipse Temurin (Java) 17 do Eclipse Adoptium.
      - name: Set up JDK 17
        uses: actions/setup-java@v3
        with:
          java-version: '17'
          distribution: 'temurin'
      # The "Build with Maven" step runs the Maven `package` target in non-interactive mode to ensure that your code builds, tests pass, and a package can be created.
      - name: Build with Maven
        run: mvn --batch-mode --update-snapshots package

Os fluxos de trabalho inicial padrão são excelentes pontos de partida ao criar seu fluxo de trabalho de criação e teste, e você pode personalizar o fluxo de trabalho inicial para atender às necessidades do seu projeto.

Especificando a versão e a arquitetura da JVM

O fluxo de trabalho inicial configura o PATH para conter OpenJDK 8 para a plataforma x64. Se você quiser usar uma versão diferente do Java, ou escolher uma arquitetura diferente (x64 ou x86), você pode usar a ação setup-java para escolher um ambiente de execução Java diferente.

Por exemplo, para usar a versão 11 do JDK fornecida pelo Adoptium para a plataforma x64, você poderá usar a ação setup-java e configurar os parâmetros java-version, distribution e architecture para '11', 'temurin' e x64.

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

Para obter mais informações, confira a ação setup-java.

Criar e testar seu código

Você pode usar os mesmos comandos usados localmente para criar e testar seu código.

O fluxo de trabalho inicial executará o destino package por padrão. Na configuração-padrão do Maven, este comando fará o download das dependências, criará classes, executará testes e classes de pacotes em seu formato distribuível, como, por exemplo, um arquivo JAR.

Se você usa comandos diferentes para criar seu projeto ou se desejar usar um alvo diferente, você poderá especificá-los. Por exemplo, o ideal é executar o destino verify configurado em um arquivo pom-ci.xml.

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

Memorizar dependências

Você pode armazenar as suas dependências para acelerar as execuções do seu fluxo de trabalho. Após uma execução bem-sucedida, seu repositório Maven local será armazenado em um cache. Para os fluxos de trabalho futuros, a cache será restaurada para que as dependências não precisem ser baixadas dos repositórios remotos do Maven. Você pode armazenar as dependências em cache simplesmente usando a ação setup-java ou use a ação cache para uma configuração personalizada e mais avançada.

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

Esse fluxo de trabalho salvará o conteúdo do repositório do Maven local, localizado no .m2 diretório do diretório base do executor. A chave de cache será o conteúdo em hash do pom.xml, ou seja, as alterações feitas no pom.xml invalidarão o cache.

Empacotar dados do fluxo de trabalho como artefatos

Após a sua criação ter sido criada com sucesso e os seus testes aprovados, é possível que você deseje fazer o upload dos Java resultantes como um artefato de criação. Isso armazenará os pacotes criados como parte da execução do fluxo de trabalho e permitirá que você faça o download desses pacotes. Os artefatos podem ajudá-lo a testar e depurar os pull requests no seu ambiente local antes de serem mesclados. Para obter mais informações, confira "Armazenar dados do fluxo de trabalho como artefatos".

Em geral, o Maven criará arquivos de saída como JARs, EARs ou WARs no diretório target. Para fazer o upload como artefatos, você pode copiá-los em um novo diretório que contém artefatos a serem subidos. Por exemplo, você pode criar um diretório chamado staging. Em seguida, você pode carregar o conteúdo desse diretório usando a ação upload-artifact.

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