{"meta":{"title":"Compilar e testar Java com o Maven","intro":"Saiba como criar um fluxo de trabalho de CI (integração contínua) em GitHub Actions para criar e testar seu projeto de Java com o Maven.","product":"GitHub Actions","breadcrumbs":[{"href":"/pt/enterprise-server@3.20/actions","title":"GitHub Actions"},{"href":"/pt/enterprise-server@3.20/actions/tutorials","title":"Tutoriais"},{"href":"/pt/enterprise-server@3.20/actions/tutorials/build-and-test-code","title":"Criar e testar código"},{"href":"/pt/enterprise-server@3.20/actions/tutorials/build-and-test-code/java-with-maven","title":"Java com Maven"}],"documentType":"article"},"body":"# Compilar e testar Java com o Maven\n\nSaiba como criar um fluxo de trabalho de CI (integração contínua) em GitHub Actions para criar e testar seu projeto de Java com o Maven.\n\n> \\[!NOTE]\n> No momento, não há suporte para executores hospedados no GitHub no GitHub Enterprise Server.\n\n## Introdução\n\nEste guia mostra como criar um fluxo de trabalho que executa a CI (integração contínua) para seu projeto de Java usando a ferramenta de gerenciamento de projeto de 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 enviar artefatos a partir da execução de um fluxo de trabalho.\n\nExecutores hospedados em GitHub têm um cache de ferramentas com software pré-instalado que inclui kits de desenvolvimento Java (JDKs) e Maven. Para obter uma lista de softwares e as versões pré-instaladas para JDK e Maven, confira [Executores hospedados no GitHub](/pt/enterprise-server@3.20/actions/using-github-hosted-runners/about-github-hosted-runners#supported-software).\n\n## Pré-requisitos\n\nVocê deve estar familiarizado com o YAML e a sintaxe do GitHub Actions. Para saber mais, veja:\n\\*\n[Sintaxe de fluxo de trabalho para o GitHub Actions](/pt/enterprise-server@3.20/actions/using-workflows/workflow-syntax-for-github-actions)\n\\*\n[Escrevendo fluxos de trabalho](/pt/enterprise-server@3.20/actions/learn-github-actions)\n\nRecomendamos que você tenha uma compreensão básica do Java e da estrutura maven. Para obter mais informações, confira o [Guia de Introdução do Maven](https://maven.apache.org/guides/getting-started/index.html) na documentação do Maven.\n\n### Usar executores auto-hospedados no GitHub Enterprise Server\n\nAo usar ações de instalação (como `actions/setup-LANGUAGE`) no GitHub Enterprise Server com executores auto-hospedados, talvez seja necessário configurar o cache de ferramentas nos executores que não têm acesso à Internet. Para saber mais, confira [Configurar o cache de ferramentas em executores auto-hospedados sem acesso à internet](/pt/enterprise-server@3.20/admin/github-actions/managing-access-to-actions-from-githubcom/setting-up-the-tool-cache-on-self-hosted-runners-without-internet-access).\n\n## Usando um modelo de fluxo de trabalho do Maven\n\nPara uma introdução rápida, adicione um modelo de fluxo de trabalho ao diretório `.github/workflows` do repositório.\n\nGitHub fornece um modelo de fluxo de trabalho para Maven que deve funcionar para a maioria dos projetos Java com Maven. As seções subsequentes deste guia fornecem exemplos de como você pode personalizar esse modelo de fluxo de trabalho.\n\n1. Em GitHub, acesse a página principal do repositório.\n\n2. No nome do repositório, clique em **<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**.\n\n   ![Captura de tela das guias do repositório \"github/docs\". A guia \"Ações\" está realçada com um contorno laranja.](/assets/images/help/repository/actions-tab-global-nav-update.png)\n\n3. Se você já tiver um fluxo de trabalho no repositório, clique em **Novo fluxo de trabalho**.\n\n4. A página \"Escolher um fluxo de trabalho\" mostra uma seleção de modelos de fluxo de trabalho recomendados. Pesquise por \"Java com Maven\".\n\n5. No fluxo de trabalho \"Java com Maven\", clique em **Configure**.\n\n   Se você não encontrar o modelo de fluxo de trabalho \"Java com Maven\", copie o seguinte código de fluxo de trabalho para um novo arquivo chamado `maven.yml` no diretório `.github/workflows` do repositório.\n\n   ```yaml copy\n   # Esse fluxo de trabalho usa ações que não são certificadas pelo GitHub.\n   # São fornecidas por terceiros e regidas por\n   # termos de serviço, política de privacidade e suporte separados\n   # online.\n   name: Java CI with Maven\n\n   on:\n     push:\n       branches: [ \"main\" ]\n     pull_request:\n       branches: [ \"main\" ]\n\n   jobs:\n     build:\n       runs-on: ubuntu-latest\n\n       steps:\n       - uses: actions/checkout@v5\n       - name: Set up JDK 17\n         uses: actions/setup-java@v4\n         with:\n           java-version: '17'\n           distribution: 'temurin'\n           cache: maven\n       - name: Build with Maven\n         run: mvn -B package --file pom.xml\n\n       # Optional: Uploads the full dependency graph to GitHub to improve the quality of Dependabot alerts this repository can receive\n       - name: Update dependency graph\n         uses: advanced-security/maven-dependency-submission-action@571e99aab1055c2e71a1e2309b9691de18d6b7d6\n   ```\n\n6. Edite o fluxo de trabalho conforme necessário. Por exemplo, altere a versão do Java.\n\n7. Clique em **Confirmar alterações**.\n\n### Como especificar a versão e a arquitetura da JVM\n\nO modelo de fluxo de trabalho 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.\n\nPor 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`.\n\n```yaml copy\nsteps:\n  - uses: actions/checkout@v5\n  - name: Set up JDK 11 for x64\n    uses: actions/setup-java@v4\n    with:\n      java-version: '11'\n      distribution: 'temurin'\n      architecture: x64\n```\n\nPara obter mais informações, confira a ação [`setup-java`](https://github.com/actions/setup-java).\n\n## Criar e testar seu código\n\nVocê pode usar os mesmos comandos usados localmente para criar e testar seu código.\n\nO modelo de fluxo de trabalho 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.\n\nSe você usa comandos diferentes para criar seu projeto ou se desejar usar um alvo diferente, você poderá especificá-los. Por exemplo, você pode querer executar o alvo `verify` configurado em um arquivo `pom-ci.xml`.\n\n```yaml copy\nsteps:\n  - uses: actions/checkout@v5\n  - uses: actions/setup-java@v4\n    with:\n      java-version: '17'\n      distribution: 'temurin'\n  - name: Run the Maven verify phase\n    run: mvn --batch-mode --update-snapshots verify\n```\n\n## Memorizar dependências\n\nVocê 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`](https://github.com/marketplace/actions/setup-java-jdk) ou use a [ação `cache`](https://github.com/actions/cache) para uma configuração personalizada e mais avançada.\n\n```yaml copy\nsteps:\n  - uses: actions/checkout@v5\n  - name: Set up JDK 17\n    uses: actions/setup-java@v4\n    with:\n      java-version: '17'\n      distribution: 'temurin'\n      cache: maven\n  - name: Build with Maven\n    run: mvn --batch-mode --update-snapshots verify\n```\n\nEsse 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.\n\n## Empacotar dados do fluxo de trabalho como artefatos\n\nDepois que o build tiver sido bem-sucedido e seus testes tiverem sido aprovados, talvez você queira carregar os pacotes de Java resultantes como um artefato de build. 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 saber mais, confira [Armazenar e compartilhar dados com artefatos de fluxo de trabalho](/pt/enterprise-server@3.20/actions/using-workflows/storing-workflow-data-as-artifacts).\n\nEm 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`.\n\n```yaml copy\nsteps:\n  - uses: actions/checkout@v5\n  - uses: actions/setup-java@v4\n    with:\n      java-version: '17'\n      distribution: 'temurin'\n  - run: mvn --batch-mode --update-snapshots verify\n  - run: mkdir staging && cp target/*.jar staging\n  - uses: actions/upload-artifact@v3\n    with:\n      name: Package\n      path: staging\n```"}