Building Java applications

This page explains how to use Cloud Build to build and test Java-based applications. If you are new to Cloud Build, read the Cloud Build quickstarts.

Before you begin

Using the maven or gradle image

You can configure Cloud Build to build Java applications using the maven image or the gradle image from Docker Hub.

To execute your tasks in the maven or gradle image, specify the URL of the image and the tagged version of the image in the name field of your build config file. If you don't specify the image tag, Cloud Build uses the latest image by default. Cloud Build starts the image specified in name by using the image's default entrypoint. To override the default entrypoint and to invoke maven or gradle as an entrypoint, specify mvn or gradle in the entrypoint field.

The following build config file specifies the entrypoint for the maven or gradle image and prints the build tool version:

maven

  steps:
  - name: maven:3-jdk-8
    entrypoint: mvn
    args: ['--version']

gradle

  steps:
  - name: gradle:5.6.2-jdk8
    entrypoint: gradle
    args: ['--version']

Configuring Java builds

  1. In your project root directory, create a build config file named cloudbuild.yaml.

  2. Run tests: maven and gradle provide maven test and gradle test, which downloads dependencies, builds the applications, and runs any tests specified in your source code. The args field of a build step takes a list of arguments and passes them to the image referenced by the name field.

    In your build config file, add test to the args field to invoke test within maven and gradle:

    maven

     steps:
     - name: maven:3-jdk-8
       entrypoint: mvn
       args: ['test']
    

    gradle

     steps:
     - name: gradle:5.6.2-jdk8
       entrypoint: gradle
       args: ['test']
    
  3. Package application: To package your application into a JAR file for your maven image, specify the package command in the args field. The package command builds a JAR file in /workspace/target/.

    To package your application into a JAR file for your gradle image, specify the assemble command in the args field. The assemble command builds a JAR file in workspace/build/libs.

    The following build step packages your Java application:

    maven

     steps:
     - name: maven:3-jdk-8
       entrypoint: mvn
       args: ['package','-Dmaven.test.skip=true']
    

    gradle

    steps:
    - name: gradle:5.6.2-jdk8
      entrypoint: gradle
      args: ['assemble']
    
  4. Containerize application: Cloud Build provides a pre-built Docker image that you can use to containzerize your Java application. To containerize your Java application, in your build config file:

    • Add a name field and specify the pre-built Docker image, which is stored in Container Registry at gcr.io/cloud-builders/docker.
    • Add an args field and specify the build argument, the name of the container image to build, and the path to your build artifact in --build-arg.
    • Add an images field to push the built image to Container Registry.

    The following build step containerizes your application and pushes your image to Container Registry:

    maven

    steps:
    - name: gcr.io/cloud-builders/docker
      args: ['build', '-t', 'gcr.io/project-id/image-name', '--build-arg=JAR_FILE=target/build-artifact']
    images: ['gcr.io/project-id/image-name']
    

    gradle

    steps:
    - name: gcr.io/cloud-builders/docker
      args: ['build', '-t', 'gcr.io/project-id/image-name', '--build-arg=JAR_FILE=build/libs/build-artifact']
    images: ['gcr.io/project-id/image-name']
    

    Where:

    • project-id: the id of your Cloud project.
    • image-name: the name of your container image.
    • build-artifact: the name of your JAR file created from your build step.
  5. Start your build: When you have your build config file ready, start your build by entering the following command in your terminal:

    gcloud builds submit --config config-file-path source-directory
    

    Where:

    • config-file-path: the path to your build config file. In this example, the build config file is named cloudbuild.yaml.
    • source-directory: the path or URL to your source code.

    If you don't specify a config-file-path and source-directory in the gcloud builds submit command, Cloud Build assumes that the config file and the source code are in the current working directory.

Code examples

Here are some example repositories you can use to build Java apps, each of which contain a sample application and a build config file to build and test that application:

  • maven-example: A Java app and an example build config file to build and test the app with mvn.
  • gradle-example: A Java app and an example build config file to build and test the app with gradle.

What's next