# Creación y prueba de Java con Maven

Aprenda a crear un flujo de trabajo de integración continua (CI) en GitHub Actions para compilar y probar el proyecto de Java con Maven.

## Introducción

En esta guía se muestra cómo crear un flujo de trabajo que realice la integración continua (CI) para el proyecto de Java mediante la herramienta de administración de proyectos de software de Maven. El flujo de trabajo que creas te permitirá ver cuándo las confirmaciones de una solicitud de extracción causan la construcción o las fallas de prueba en tu rama por defecto; este enfoque puede ayudar a garantizar que tu código siempre sea correcto. Puede ampliar su flujo de trabajo de CI para almacenar en caché archivos y subir artefactos desde una ejecución de flujo de trabajo.

Los ejecutores hospedados en GitHub tienen un caché de herramientas con software pre-instalado, lo cual incluye los Kits de Desarrollo Java (JDK) y Maven. Para obtener una lista del software y las versiones preinstaladas para JDK y Maven, consulta [Ejecutores hospedados en GitHub](/es/enterprise-cloud@latest/actions/using-github-hosted-runners/about-github-hosted-runners#supported-software).

## Requisitos previos

Deberías estar familiarizado con YAML y la sintaxis para las GitHub Actions. Para más información, vea:

* [Sintaxis del flujo de trabajo para GitHub Actions](/es/enterprise-cloud@latest/actions/using-workflows/workflow-syntax-for-github-actions)
* [Escritura de flujos de trabajo](/es/enterprise-cloud@latest/actions/learn-github-actions)

Se recomienda tener conocimientos básicos sobre Java y el marco de Maven. Para más información, vea la [Guía de introducción a Maven](https://maven.apache.org/guides/getting-started/index.html) en la documentación de Maven.

## Uso de una plantilla de flujo de trabajo de Maven

Para comenzar rápidamente, agregue una plantilla de flujo de trabajo al directorio `.github/workflows` del repositorio.

GitHub proporciona una plantilla de flujo de trabajo para Maven que debería funcionar con la mayoría de los proyectos de Java con Maven. En las secciones siguientes de esta guía se proporcionan ejemplos de cómo puede personalizar esta plantilla de flujo de trabajo.

1. En GitHub, navegue hasta la página principal del repositorio.

2. En el nombre del repositorio, haz clic en **<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**.

   ![Captura de pantalla de las pestañas del repositorio "github/docs". La pestaña "Proyectos" aparece resaltada con un contorno naranja.](/assets/images/help/repository/actions-tab-global-nav-update.png)

3. Si ya tiene un flujo de trabajo en su repositorio, haga clic en **New workflow** (Nuevo flujo de trabajo).

4. En la página "Elegir un flujo de trabajo" se muestra una selección de plantillas de flujo de trabajo recomendadas. Busque "Java con Maven".

5. En el flujo de trabajo "Java con Maven", haga clic en **Configure**.

6. Edita el flujo de trabajo según sea necesario. Por ejemplo, cambie la versión de Java.

7. Haga clic en **Commit changes** (Confirmar cambios).

El archivo de flujo de trabajo `maven.yml` se agrega al directorio `.github/workflows` de tu repositorio.

### Especificar la versión y la arquitectura de Java

La plantilla de flujo de trabajo configura `PATH` a fin de que contenga OpenJDK 8 para la plataforma x64. Si quieres usar una versión diferente de Java o tener como destino una arquitectura diferente (`x64` o `x86`), puedes usar la acción `setup-java` para elegir un entorno de ejecución de Java diferente.

Por ejemplo, para usar la versión 11 del JDK proporcionado por Adoptium para la plataforma x64, puedes usar la acción `setup-java` y configurar los parámetros `java-version`, `distribution` y `architecture` en `'11'``'temurin'` y `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
```

Para obtener más información, consulta la acción [`setup-java`](https://github.com/actions/setup-java).

## Construir y probar tu código

Puedes usar los mismos comandos que usas de forma local para construir y probar tu código.

La plantilla de flujo de trabajo ejecutará el destino `package` de manera predeterminada. En la configuración predeterminada de Maven, este comando descargará dependencias, construirá clases, ejecutará pruebas y empaquetará las clases en su formato distribuible, por ejemplo, un archivo JAR.

Si usas diferentes comandos para compilar tu proyecto, o si quieres usar un destino diferente, puedes especificarlos. Por ejemplo, puede que quiera ejecutar el destino `verify` configurado en un archivo `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
```

## Almacenar dependencias en caché

Puedes almacenar en caché tus dependencias para acelerar tus ejecuciones de flujo de trabajo. Después de una ejecución correcta, el repositorio de Maven local se almacenará en una memoria caché. En las ejecuciones de flujo de trabajo futuras, el caché se restaurará para que las dependencias no necesiten descargarse desde los repositorios remotos de Maven. Puede almacenar en caché las dependencias simplemente mediante la [acción `setup-java`](https://github.com/marketplace/actions/setup-java-jdk), o bien puede usar la [acción `cache`](https://github.com/actions/cache) para la configuración personalizada y más avanzada.

```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
```

Este flujo de trabajo guardará los contenidos del repositorio local de Maven, ubicado en el directorio `.m2` del directorio principal del ejecutor. La clave de caché será el contenido con hash de `pom.xml`, por lo que los cambios en `pom.xml` invalidarán la caché.

## Empaquetar datos de flujo de trabajo como artefactos

Una vez que la compilación se haya realizado correctamente y se hayan superado las pruebas, es posible que quiera cargar los paquetes de Java resultantes como un artefacto de compilación. Esto almacenará los paquetes compilados como parte de la ejecución del flujo de trabajo y te permitirá descargarlos. Los artefactos pueden ayudarte a probar y depurar solicitudes de extracción en tu entorno local antes de que se fusionen. Para más información, consulta [Almacenamiento y uso compartido de datos con artefactos de flujo de trabajo](/es/enterprise-cloud@latest/actions/using-workflows/storing-workflow-data-as-artifacts).

Maven normalmente creará archivos de salida como JAR, EAR o WAR en el directorio `target`. Para cargarlos como artefactos, puedes copiarlos en un nuevo directorio que contenga artefactos para cargar. Por ejemplo, puede crear un directorio denominado `staging`. Después, puede cargar el contenido de ese directorio mediante la acción `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@v4
    with:
      name: Package
      path: staging
```