This page explains how to use Cloud Build to build and test Java-based applications, store built artifacts in a Maven repository in Artifact Registry, and generate build provenance information.
Before you begin
- Be familiar with creating Java-based applications.
- Be familiar with Maven
- Have your Java project ready.
- Be familiar with how to write a Cloud Build configuration file.
- Have a Maven repository in Artifact Registry. If you do not have one, create a new repository.
- To run the gcloudcommands in this page, install the Google Cloud CLI.
Using the maven image
You can configure Cloud Build to build Java applications using the
maven image from Docker Hub.
To execute your tasks in the maven image, add a step to your build config with the following fields:
- name: Set the value of this field to- mavenor- maven:<tag>, where the tag represents the version. If you don't specify the image tag, Cloud Build uses the- latestimage by default.
- entrypoint: Setting this field overrides the default entry point of the image referenced in- name. Set the value of this field to- mvnto invoke- mvnas the entrypoint of the build step and run- mvncommands.
- args: The- argsfield of a build step takes a list of arguments and passes them to the image referenced by the- namefield.
The following build step specifies the entrypoint for the maven image
tagged as 3.3-jdk-8 and prints the build tool version:
          steps:
          - name: maven:3.3-jdk-8
            entrypoint: mvn
            args: ['--version']
Configuring Java builds
- In your project root directory, create a build config file named - cloudbuild.yaml.
- Run tests: - mavenprovides- maven test, which downloads dependencies, builds the applications, and runs any tests specified in your source code. The- argsfield of a build step takes a list of arguments and passes them to the image referenced by the- namefield.- In your build config file, add - testto the- argsfield to invoke- testwithin- maven:- steps: - name: maven:3.3-jdk-8 entrypoint: mvn args: ['test']
- Package application: To package your application into a JAR file for your - mavenimage, specify the- packagecommand in the- argsfield. The- packagecommand builds a JAR file in- /workspace/target/.- The following build step packages your Java application: - steps: - name: maven:3.3-jdk-8 entrypoint: mvn args: ['package','-Dmaven.test.skip=true']
- Upload to Artifact Registry: - In your build config file, use the - mavenArtifactsfield to specify your application path and your Maven repository in Artifact Registry:- artifacts: mavenArtifacts: - repository: 'https://location-maven.pkg.dev/project-id/repository-name' path: 'app-path' artifactId: 'build-artifact' groupId: 'group-id' version: 'version'- Replace the following values: - location: the location for your repository in Artifact Registry.
- project-id: the ID of the Google Cloud project that contains your Artifact Registry repository.
- repository-name: the name of your Maven repository in Artifact Registry.
- app-path: the path to your packaged application.
- build-artifact: the name of your package file created from your build step.
- group-id: uniquely identifies your project across all Maven projects, in the format com.mycompany.app. For more information, see the Maven guide to naming conventions.
- version: the version number for your application, formatted in numbers and dots like 1.0.1.
 
- Optional: Enable provenance generation - Cloud Build can generate verifiable Supply chain Levels for Software Artifacts (SLSA) build provenance metadata to help secure your continuous integration pipeline. - To enable provenance generation, add - requestedVerifyOption: VERIFIEDto the- optionssection in your config file.
- Start your build: manually or using build triggers. - Once your build completes, you can view repository details in Artifact Registry. - You can also view build provenance metadata and validate provenance. 
What's next
- Learn how to view build results.
- Learn how to safeguard builds.
- Learn how to perform blue/green deployments on Compute Engine.
- Learn how to build and containerize Java applications.
- Learn how to deploy an application on Cloud Run.
- Learn how to deploy an application on GKE.
- Learn how to troubleshoot build errors.