Compila, prueba y crea contenedores para aplicaciones de Java
Organiza tus páginas con colecciones
Guarda y categoriza el contenido según tus preferencias.
En esta página, se explica cómo usar Cloud Build para compilar, probar y
contenedorizar aplicaciones basadas en Java, subir tus imágenes de contenedor a
Artifact Registry y generar la procedencia de la compilación.
Antes de comenzar
Familiarízate con la creación de aplicaciones basadas en Java.
Ten listo tu proyecto de Java, incluido un Dockerfile.
Tener un repositorio de Docker en Artifact Registry o crear uno nuevo
Para ejecutar los comandos de gcloud de esta página, instala Google Cloud CLI.
Usa las imágenes de maven o gradle
Puedes configurar Cloud Build para compilar aplicaciones de Java con la imagen de maven o la imagen de gradle de Docker Hub.
maven
Para ejecutar tus tareas en la imagen maven, agrega un paso a la configuración de compilación con los siguientes campos:
name: Establece el valor de este campo en maven o maven:<tag>, donde la etiqueta representa la versión. Si no especificas la etiqueta de imagen, Cloud Build usa la imagen latest de forma predeterminada.
entrypoint: Si configuras este campo, se anula el punto de entrada predeterminado de la imagen a la que se hace referencia en name. Establece el valor de este campo como mvn para invocar a mvn como el punto de entrada del paso de compilación y ejecuta los comandos de mvn.
args: En el campo args de un paso de compilación, se toma una lista de argumentos y se los pasa a la imagen a la que se hace referencia en el campo name.
En el siguiente paso de compilación, se especifica el entrypoint para la imagen maven etiquetada como 3.3-jdk-8 y se imprime la versión de la herramienta de compilación:
Para ejecutar tus tareas en la imagen de gradle, agrega un paso a la configuración de compilación con los siguientes campos:
name: Establece el valor de este campo en gradle o gradle:<tag>, donde la etiqueta representa la versión. Si no especificas la etiqueta de imagen, Cloud Build usa la imagen latest de forma predeterminada.
entrypoint: Si configuras este campo, se anula el punto de entrada predeterminado de la imagen a la que se hace referencia en name. Establece el valor de este campo como gradle para invocar a gradle como el punto de entrada del paso de compilación y ejecuta los comandos de gradle.
args: En el campo args de un paso de compilación, se toma una lista de argumentos y se los pasa a la imagen a la que se hace referencia en el campo name.
En el siguiente paso de compilación, se especifica el entrypoint para la imagen gradle etiquetada como 5.6.2-jdk8 y se imprime la versión de la herramienta de compilación:
En el directorio raíz del proyecto, crea un archivo de configuración de compilación llamado cloudbuild.yaml.
Ejecuta pruebas: maven y gradle proporcionan maven test y gradle test, que descargan dependencias, compilan las aplicaciones y ejecutan las pruebas especificadas en el código fuente. En el campo args de un paso de compilación, se toma una lista de argumentos y se los pasa a la imagen a la que se hace referencia en el campo name.
En el archivo de configuración de compilación, agrega test al campo args para invocar test dentro de maven y gradle:
Empaqueta la aplicación: A fin de empaquetar la aplicación en un archivo JAR para la imagen de maven, especifica el comando package en el campo args.
El comando package compila un archivo JAR en /workspace/target/.
Con el fin de empaquetar la aplicación en un archivo JAR para la imagen de gradle, especifica el comando assemble en el campo args. El comando assemble compila un archivo JAR en workspace/build/libs.
En el siguiente paso de compilación, se empaqueta la aplicación de Java:
Crea contenedores en la aplicación: Cloud Build proporciona una imagen de Docker compilada con anterioridad que puedes usar para crear contenedores en la aplicación de Java. Para crear contenedores en tu aplicación de Java, sigue estos pasos en tu archivo de configuración de compilación:
Agrega un campo name y especifica la imagen prediseñada de Docker en gcr.io/cloud-builders/docker.
Agrega un campo args y especifica los argumentos build, incluido el nombre de la imagen de contenedor que se compilará y la ruta a tu artefacto de compilación.
Agrega un campo images para enviar la imagen del contenedor compilada a Artifact Registry.
En el siguiente paso de compilación, se crean contenedores en la aplicación, se envía la imagen de contenedor a Artifact Registry y se genera información de procedencia de la compilación:
location: Es la ubicación regional o multirregional de tu repositorio.
project-id: Es el ID de tu Google Cloud proyecto.
repository: Es el nombre de tu repositorio de Artifact Registry.
image: El nombre de tu imagen de contenedor
build-artifact: El nombre de tu archivo JAR creado a partir del paso de compilación.
Comienza a compilar: Cuando tengas listo el archivo de configuración de compilación, ingresa el siguiente comando en la terminal para comenzar la compilación:
config-file-path: Es la ruta de acceso a tu archivo de configuración de compilación. En este ejemplo, el archivo de configuración de compilación se llama cloudbuild.yaml.
source-directory: La ruta de acceso o la URL al código fuente.
Si no se especifica config-file-path ni source-directory en el comando gcloud builds submit, Cloud Build da por hecho que el archivo de configuración y el código fuente están en el directorio de trabajo actual.
Estos son algunos repositorios de ejemplo que puedes usar a fin de compilar apps de Java; contienen una aplicación de muestra y un archivo de configuración de compilación para compilar y probar dicha aplicación:
maven-example: Es una app de Java y un archivo de configuración de compilación de ejemplo para compilar y probar la aplicación con mvn.
gradle-example: Es una app de Java y un archivo de configuración de compilación de ejemplo para compilar y probar la aplicación con gradle.
[[["Fácil de comprender","easyToUnderstand","thumb-up"],["Resolvió mi problema","solvedMyProblem","thumb-up"],["Otro","otherUp","thumb-up"]],[["Difícil de entender","hardToUnderstand","thumb-down"],["Información o código de muestra incorrectos","incorrectInformationOrSampleCode","thumb-down"],["Faltan la información o los ejemplos que necesito","missingTheInformationSamplesINeed","thumb-down"],["Problema de traducción","translationIssue","thumb-down"],["Otro","otherDown","thumb-down"]],["Última actualización: 2025-09-04 (UTC)"],[[["\u003cp\u003eCloud Build can be used to build, test, and containerize Java applications using \u003ccode\u003emaven\u003c/code\u003e or \u003ccode\u003egradle\u003c/code\u003e images from Docker Hub.\u003c/p\u003e\n"],["\u003cp\u003eTo configure a Java build, a \u003ccode\u003ecloudbuild.yaml\u003c/code\u003e file should be created to define steps for testing, packaging, and containerizing the application.\u003c/p\u003e\n"],["\u003cp\u003eThe process includes using \u003ccode\u003emvn test\u003c/code\u003e or \u003ccode\u003egradle test\u003c/code\u003e for testing, \u003ccode\u003emvn package\u003c/code\u003e or \u003ccode\u003egradle assemble\u003c/code\u003e for packaging, and a prebuilt Docker image for containerization.\u003c/p\u003e\n"],["\u003cp\u003eAfter containerization, the container image can be uploaded to Artifact Registry, and build provenance can be generated for enhanced security.\u003c/p\u003e\n"],["\u003cp\u003eBuilds are initiated with the \u003ccode\u003egcloud builds submit\u003c/code\u003e command, and completed builds can be viewed in Artifact Registry, as well as detailed information on the build provenance metadata.\u003c/p\u003e\n"]]],[],null,["# Build, test, and containerize Java applications\n\nThis page explains how to use Cloud Build to build, test, and\ncontainerize Java-based applications, upload your container images to\nArtifact Registry, and generate build provenance.\n\nBefore you begin\n----------------\n\n- Be familiar with creating Java-based applications.\n- Have your Java project ready, including a `Dockerfile`.\n- Have a Docker repository in Artifact Registry, or [create a new repository](/artifact-registry/docs/repositories/create-repos).\n- Be familiar with [how to write a Cloud Build configuration file](/build/docs/build-config).\n- To run the `gcloud` commands in this page, install the [Google Cloud CLI](/sdk).\n\nUsing the `maven` or `gradle` image\n-----------------------------------\n\nYou can configure Cloud Build to build Java applications using the\n[`maven` image](https://hub.docker.com/_/maven)\nor the [`gradle` image](https://hub.docker.com/_/gradle)\nfrom Docker Hub. \n\n### maven\n\nTo execute your tasks in the `maven` image, add a step to your build config with the following fields:\n\n- `name`: Set the value of this field to `maven` or `maven:\u003ctag\u003e`, where the tag represents the version. If you don't specify the image tag, Cloud Build uses the `latest` image by default.\n- `entrypoint`: Setting this field overrides the default entry point of the image referenced in `name`. Set the value of this field to `mvn` to invoke `mvn` as the entrypoint of the build step and run `mvn` commands.\n- `args`: The `args` field of a build step takes a list of arguments and passes them to the image referenced by the `name` field.\n\nThe following build step specifies the `entrypoint` for the `maven` image\ntagged as `3.3-jdk-8` and prints the build tool version: \n\n steps:\n - name: maven:3.3-jdk-8\n entrypoint: mvn\n args: ['--version']\n\n### gradle\n\nTo execute your tasks in the `gradle` image, add a step to your build config with the following fields:\n\n- `name`: Set the value of this field to `gradle` or `gradle:\u003ctag\u003e`, where the tag represents the version. If you don't specify the image tag, Cloud Build uses the `latest` image by default.\n- `entrypoint`: Setting this field overrides the default entry point of the image referenced in `name`. Set the value of this field to `gradle` to invoke `gradle` as the entrypoint of the build step and run `gradle` commands.\n- `args`: The `args` field of a build step takes a list of arguments and passes them to the image referenced by the `name` field.\n\nThe following build step specifies the `entrypoint` for the `gradle` image\ntagged as `5.6.2-jdk8` and prints the build tool version: \n\n steps:\n - name: gradle:5.6.2-jdk8\n entrypoint: gradle\n args: ['--version']\n\nConfiguring `Java` builds\n-------------------------\n\n1. In your project root directory, create a build config file named\n `cloudbuild.yaml`.\n\n2. **Run tests** : `maven` and `gradle` provide `maven test` and `gradle test`,\n which downloads dependencies, builds the applications, and runs any tests\n specified in your source code. The `args` field of a build step takes a\n list of arguments and passes them to the image referenced by the `name` field.\n\n In your build config file, add `test` to the `args` field to invoke `test`\n within `maven` and `gradle`: \n\n ### maven\n\n steps:\n - name: maven:3.3-jdk-8\n entrypoint: mvn\n args: ['test']\n\n ### gradle\n\n steps:\n - name: gradle:5.6.2-jdk8\n entrypoint: gradle\n args: ['test']\n\n3. **Package application** : To package your application into a JAR file\n for your `maven` image, specify the `package` command in the `args` field.\n The `package` command builds a JAR file in `/workspace/target/`.\n\n To package your application into a JAR file for your `gradle` image,\n specify the `assemble` command in the `args` field. The `assemble` command\n builds a JAR file in `workspace/build/libs`.\n\n The following build step packages your Java application: \n\n ### maven\n\n steps:\n - name: maven:3.3-jdk-8\n entrypoint: mvn\n args: ['package','-Dmaven.test.skip=true']\n\n | **Note:** The `package` command re-runs tests. Adding `-Dmaven.test.skip=true` to the `args` field will skip tests.\n\n ### gradle\n\n steps:\n - name: gradle:5.6.2-jdk8\n entrypoint: gradle\n args: ['assemble']\n\n4. **Containerize application** : Cloud Build provides a\n [prebuilt Docker image](https://github.com/GoogleCloudPlatform/cloud-builders/tree/master/docker)\n that you can use to containerize your Java application. To containerize your\n Java application, in your build config file:\n\n - Add a `name` field and specify the prebuilt Docker image at `gcr.io/cloud-builders/docker`.\n - Add an `args` field and specify the `build` arguments, including the name of the container image to build, and the path to your build artifact.\n - Add an `images` field to push the built container image to Artifact Registry.\n - Optional: Add [`requestedVerifyOption: VERIFIED`](/build/docs/build-config-file-schema#options)\n within the `options` field in your build config file to enable\n [Supply chain Levels for Software Artifacts (SLSA)](https://slsa.dev/)\n provenance generation.\n\n | **Note:** If you use a `docker push` build step to upload images to Artifact Registry rather than using the `images` field, then your build won't have provenance information.\n\n The following build step containerizes your application, pushes your container\n image to Artifact Registry, and generates build provenance information: \n\n ### maven\n\n steps:\n - name: gcr.io/cloud-builders/docker\n args: ['build', '-t', '\u003cvar translate=\"no\"\u003elocation\u003c/var\u003e-docker.pkg.dev/\u003cvar translate=\"no\"\u003eproject-id\u003c/var\u003e/\u003cvar translate=\"no\"\u003erepository\u003c/var\u003e/\u003cvar translate=\"no\"\u003eimage\u003c/var\u003e', '--build-arg=JAR_FILE=target/\u003cvar translate=\"no\"\u003ebuild-artifact\u003c/var\u003e', '.']\n images: ['\u003cvar translate=\"no\"\u003elocation\u003c/var\u003e-docker.pkg.dev/\u003cvar translate=\"no\"\u003eproject-id\u003c/var\u003e/\u003cvar translate=\"no\"\u003erepository\u003c/var\u003e/\u003cvar translate=\"no\"\u003eimage\u003c/var\u003e']\n\n ### gradle\n\n steps:\n - name: gcr.io/cloud-builders/docker\n args: ['build', '-t', '\u003cvar translate=\"no\"\u003elocation\u003c/var\u003e-docker.pkg.dev/\u003cvar translate=\"no\"\u003eproject-id\u003c/var\u003e/\u003cvar translate=\"no\"\u003erepository\u003c/var\u003e/\u003cvar translate=\"no\"\u003eimage\u003c/var\u003e', '--build-arg=JAR_FILE=build/libs/\u003cvar translate=\"no\"\u003ebuild-artifact\u003c/var\u003e', '.']\n images: ['\u003cvar translate=\"no\"\u003elocation\u003c/var\u003e-docker.pkg.dev/\u003cvar translate=\"no\"\u003eproject-id\u003c/var\u003e/\u003cvar translate=\"no\"\u003erepository\u003c/var\u003e/\u003cvar translate=\"no\"\u003eimage\u003c/var\u003e']\n\n Where:\n - \u003cvar translate=\"no\"\u003elocation\u003c/var\u003e: the regional or multi-regional location for your repository.\n - \u003cvar translate=\"no\"\u003eproject-id\u003c/var\u003e: the ID of your Google Cloud project.\n - \u003cvar translate=\"no\"\u003erepository\u003c/var\u003e: the name of your repository Artifact Registry.\n - \u003cvar translate=\"no\"\u003eimage\u003c/var\u003e: the name of your container image.\n - \u003cvar translate=\"no\"\u003ebuild-artifact\u003c/var\u003e: the name of your JAR file created from your build step.\n5. **Start your build**: When you have your build config\n file ready, start your build by entering the following command in your\n terminal:\n\n gcloud builds submit --region=\u003cvar translate=\"no\"\u003eREGION\u003c/var\u003e --config \u003cvar translate=\"no\"\u003econfig-file-path\u003c/var\u003e \u003cvar translate=\"no\"\u003esource-directory\u003c/var\u003e\n\n Where:\n - \u003cvar translate=\"no\"\u003econfig-file-path\u003c/var\u003e: the path to your build config file. In this example, the build config file is named `cloudbuild.yaml`.\n - \u003cvar translate=\"no\"\u003esource-directory\u003c/var\u003e: the path or URL to your source code.\n - \u003cvar translate=\"no\"\u003eREGION\u003c/var\u003e: one of the [supported build regions](/build/docs/locations).\n\n If you don't specify a \u003cvar translate=\"no\"\u003econfig-file-path\u003c/var\u003e and \u003cvar translate=\"no\"\u003esource-directory\u003c/var\u003e\n in the `gcloud builds submit` command, Cloud Build assumes that the\n config file and the source code are in the current working directory.\n\n Once your build completes, you can [view repository details](/artifact-registry/docs/repositories/list-repos)\n in Artifact Registry.\n\n You can also [view build provenance metadata](/build/docs/securing-builds/generate-validate-build-provenance#view) and [validate provenance](/build/docs/securing-builds/generate-validate-build-provenance#validate_provenance).\n\nCode examples\n-------------\n\nHere are some example repositories you can use to build Java apps, each of\nwhich contain a sample application and a build config file to build and test\nthat application:\n\n- [maven-example](https://github.com/GoogleCloudPlatform/cloud-build-samples/tree/main/maven-example): A Java app and an example build config file to build and test the app with `mvn`.\n- [gradle-example](https://github.com/GoogleCloudPlatform/cloud-build-samples/tree/main/gradle-example): A Java app and an example build config file to build and test the app with `gradle`.\n\nWhat's next\n-----------\n\n- Learn how to [view build results](/build/docs/view-build-results).\n- Learn how to [safeguard builds](/software-supply-chain-security/docs/safeguard-builds).\n- Learn how to [build standalone Java applications](/build/docs/building/build-containerize-java).\n- Learn how to [deploy an application on Cloud Run](/build/docs/deploying-builds/deploy-cloud-run).\n- Learn how to [deploy an application on GKE](/build/docs/building/build/docs/deploying-builds/deploy-gke).\n- Learn how to [troubleshoot build errors](/build/docs/troubleshooting)."]]