---
title: 'Gradle Tutorial'
description: You'll add Nx to an existing Gradle repo
sidebar:
  label: 'Gradle Monorepo'
filter: 'type:Guides'
---

This tutorial walks you through adding Nx to an existing Gradle project. You'll see how Nx enhances your Gradle workflow with caching, task orchestration, and better developer experience.

What you'll learn:

- How to integrate Nx with your existing Gradle build system
- How Nx caching speeds up your Gradle builds locally and in CI
- How to visualize and understand project dependencies in your Gradle workspace
- How to run Gradle tasks more efficiently with Nx task runner
- How to set up Nx Cloud for faster and self-healing CI

## Ready to start?

{% aside type="note" title="Prerequisites" %}
This tutorial requires a [GitHub account](https://github.com) to demonstrate the full value of **Nx** - including task running, caching, and CI integration.
{% /aside %}

### Step 1: Setup local env

Make sure that you have [Gradle](https://gradle.org/) installed on your system.
Consult [Gradle's installation guide](https://docs.gradle.org/current/userguide/installation.html) for instruction that
are specific to your operating system.

To verify that Gradle was installed correctly, run this command:

```shell
gradle --version
```

To streamline this tutorial, we'll install Nx globally on your system. You can use your preferred installation method below based on your OS:

{% tabs %}
{% tabitem label="Homebrew (macOS, Linux)" %}

Make sure [Homebrew is installed](https://brew.sh/), then install Nx globally with these commands:

```shell
brew install nx
```

{% /tabitem %}
{% tabitem label="Chocolatey (Windows)" %}

```shell
choco install nx
```

{% /tabitem %}
{% tabitem label="apt (Ubuntu)" %}

```shell
sudo add-apt-repository ppa:nrwl/nx
sudo apt update
sudo apt install nx
```

{% /tabitem %}

{% tabitem label="Node (any OS)" %}

Install node from the [NodeJS website](https://nodejs.org/en/download), then install Nx globally with this command:

```shell
npm install --global nx
```

{% /tabitem %}
{% /tabs %}

### Step 2: Fork sample repository

This tutorial picks up where [Spring framework](https://spring.io/)'s guide for [Multi-Module Projects](https://spring.io/guides/gs/multi-module) leaves off.

Fork [the sample repository](https://github.com/nrwl/gradle-tutorial/fork), and then clone it on your local machine:

```shell
git clone https://github.com/<your-username>/gradle-tutorial.git
```

The Multi-Module Spring Tutorial left us with 2 projects:

- The main `application` project which contains the Spring `DemoApplication`
- A `library` project which contains a Service used in the `DemoApplication`

You can see the above 2 projects by running `./gradlew projects`

```text {% title="./gradlew projects"  %}
> Task :projects

------------------------------------------------------------
Root project 'gradle-tutorial'
------------------------------------------------------------

Root project 'gradle-tutorial'
+--- Project ':application'
\--- Project ':library'

```

## Add Nx

Nx is a monorepo platform with built in tooling and advanced CI capabilities. It helps you maintain and scale monorepos,
Both locally and on CI. Explore the features of Nx by adding it to the Gradle workspace above.

To add Nx, run

```shell
nx init
```

This command will download the latest version of Nx and help set up your repository to take advantage of it. Nx will
also detect Gradle is used in the repo so it will propose adding the `@nx/gradle` plugin to integrate Gradle with Nx.

1. You'll also be prompted to add Nx Cloud, select "yes"
2. Select the plugin and continue with the setup.

Finally, commit and push all the changes to GitHub and proceed with finishing your Nx Cloud setup.

### Finish Nx Cloud setup

> Nx Cloud provides self-healing CI, remote caching and many other features. [Learn more about Nx Cloud features](/docs/features/ci-features).

Click the link printing in your terminal, or you can [finish setup in Nx Cloud](https://cloud.nx.app/setup/connect-workspace/github/select)

{% call_to_action variant="simple" title="Finish Nx Cloud Setup" url="https://cloud.nx.app/setup/connect-workspace/github/select" /%}

### Verify your setup

Please verify closely that you have the following setup:

1. A new Nx workspace on your local machine
2. A corresponding GitHub repository for the workspace
3. You completed the full Nx Cloud onboarding, and you now have a Nx Cloud dashboard that is connected to your example repository on GitHub.

You should see your workspace in your [Nx Cloud organization](https://cloud.nx.app/orgs).

## Explore your workspace

Like Gradle, Nx understands your workspace as a graph of projects. Nx uses this graph for many things which we will
learn about in following sections. To visualize this graph in your browser, Run the following command and click the
"Show all projects" button in the left sidebar.

You will recognize that the projects which are shown, are the same projects which Gradle shows.
The `@nx/gradle` plugin reflects the graph of projects in Gradle into the Nx Project Graph. As projects
are created, deleted, and change their dependencies, Nx will automatically recalculate the graph. Exploring this graph
visually is vital to understanding how your code is structured and how Nx and Gradle behaves.

```shell
nx graph
```

{% graph title="Gradle Projects" height="300px" %}

```json
{
  "hash": "ad0ea8f7ae85c873d6478c31b51a95c54115a49844d62a5b3972232ac82137d0",
  "projects": [
    {
      "name": "application",
      "type": "lib",
      "data": {
        "root": "application",
        "name": "application",
        "metadata": {
          "technologies": ["gradle"]
        },
        "targets": {
          "bootRun": {
            "options": {
              "cwd": "application",
              "command": "../gradlew bootRun"
            },
            "cache": false,
            "executor": "nx:run-commands",
            "configurations": {}
          },
          "bootTestRun": {
            "options": {
              "cwd": "application",
              "command": "../gradlew bootTestRun"
            },
            "cache": false,
            "executor": "nx:run-commands",
            "configurations": {}
          },
          "assemble": {
            "options": {
              "cwd": "application",
              "command": "../gradlew assemble"
            },
            "cache": true,
            "executor": "nx:run-commands",
            "configurations": {}
          },
          "bootBuildImage": {
            "options": {
              "cwd": "application",
              "command": "../gradlew bootBuildImage"
            },
            "cache": true,
            "executor": "nx:run-commands",
            "configurations": {}
          },
          "bootJar": {
            "options": {
              "cwd": "application",
              "command": "../gradlew bootJar"
            },
            "cache": true,
            "executor": "nx:run-commands",
            "configurations": {}
          },
          "build": {
            "options": {
              "cwd": "application",
              "command": "../gradlew build"
            },
            "cache": true,
            "inputs": ["production", "^production"],
            "outputs": ["{workspaceRoot}/application/build"],
            "dependsOn": ["^build", "classes"],
            "executor": "nx:run-commands",
            "configurations": {}
          },
          "buildDependents": {
            "options": {
              "cwd": "application",
              "command": "../gradlew buildDependents"
            },
            "cache": true,
            "executor": "nx:run-commands",
            "configurations": {}
          },
          "buildNeeded": {
            "options": {
              "cwd": "application",
              "command": "../gradlew buildNeeded"
            },
            "cache": true,
            "executor": "nx:run-commands",
            "configurations": {}
          },
          "classes": {
            "options": {
              "cwd": "application",
              "command": "../gradlew classes"
            },
            "cache": true,
            "inputs": ["default", "^default"],
            "outputs": ["{workspaceRoot}/application/build/classes"],
            "dependsOn": ["^classes"],
            "executor": "nx:run-commands",
            "configurations": {}
          },
          "clean": {
            "options": {
              "cwd": "application",
              "command": "../gradlew clean"
            },
            "cache": true,
            "executor": "nx:run-commands",
            "configurations": {}
          },
          "jar": {
            "options": {
              "cwd": "application",
              "command": "../gradlew jar"
            },
            "cache": true,
            "executor": "nx:run-commands",
            "configurations": {}
          },
          "resolveMainClassName": {
            "options": {
              "cwd": "application",
              "command": "../gradlew resolveMainClassName"
            },
            "cache": true,
            "executor": "nx:run-commands",
            "configurations": {}
          },
          "resolveTestMainClassName": {
            "options": {
              "cwd": "application",
              "command": "../gradlew resolveTestMainClassName"
            },
            "cache": true,
            "executor": "nx:run-commands",
            "configurations": {}
          },
          "testClasses": {
            "options": {
              "cwd": "application",
              "command": "../gradlew testClasses"
            },
            "cache": true,
            "executor": "nx:run-commands",
            "configurations": {}
          },
          "javadoc": {
            "options": {
              "cwd": "application",
              "command": "../gradlew javadoc"
            },
            "cache": false,
            "executor": "nx:run-commands",
            "configurations": {}
          },
          "buildEnvironment": {
            "options": {
              "cwd": "application",
              "command": "../gradlew buildEnvironment"
            },
            "cache": false,
            "executor": "nx:run-commands",
            "configurations": {}
          },
          "dependencies": {
            "options": {
              "cwd": "application",
              "command": "../gradlew dependencies"
            },
            "cache": false,
            "executor": "nx:run-commands",
            "configurations": {}
          },
          "dependencyInsight": {
            "options": {
              "cwd": "application",
              "command": "../gradlew dependencyInsight"
            },
            "cache": false,
            "executor": "nx:run-commands",
            "configurations": {}
          },
          "dependencyManagement": {
            "options": {
              "cwd": "application",
              "command": "../gradlew dependencyManagement"
            },
            "cache": false,
            "executor": "nx:run-commands",
            "configurations": {}
          },
          "help": {
            "options": {
              "cwd": "application",
              "command": "../gradlew help"
            },
            "cache": false,
            "executor": "nx:run-commands",
            "configurations": {}
          },
          "javaToolchains": {
            "options": {
              "cwd": "application",
              "command": "../gradlew javaToolchains"
            },
            "cache": false,
            "executor": "nx:run-commands",
            "configurations": {}
          },
          "outgoingVariants": {
            "options": {
              "cwd": "application",
              "command": "../gradlew outgoingVariants"
            },
            "cache": false,
            "executor": "nx:run-commands",
            "configurations": {}
          },
          "projects": {
            "options": {
              "cwd": "application",
              "command": "../gradlew projects"
            },
            "cache": false,
            "executor": "nx:run-commands",
            "configurations": {}
          },
          "properties": {
            "options": {
              "cwd": "application",
              "command": "../gradlew properties"
            },
            "cache": false,
            "executor": "nx:run-commands",
            "configurations": {}
          },
          "resolvableConfigurations": {
            "options": {
              "cwd": "application",
              "command": "../gradlew resolvableConfigurations"
            },
            "cache": false,
            "executor": "nx:run-commands",
            "configurations": {}
          },
          "tasks": {
            "options": {
              "cwd": "application",
              "command": "../gradlew tasks"
            },
            "cache": false,
            "executor": "nx:run-commands",
            "configurations": {}
          },
          "projectReport": {
            "options": {
              "cwd": "application",
              "command": "../gradlew projectReport"
            },
            "cache": false,
            "outputs": ["{workspaceRoot}/application/build/reports/project"],
            "executor": "nx:run-commands",
            "configurations": {}
          },
          "check": {
            "options": {
              "cwd": "application",
              "command": "../gradlew check"
            },
            "cache": true,
            "executor": "nx:run-commands",
            "configurations": {}
          },
          "test": {
            "options": {
              "cwd": "application",
              "command": "../gradlew test"
            },
            "cache": true,
            "inputs": ["default", "^production"],
            "dependsOn": ["classes"],
            "executor": "nx:run-commands",
            "configurations": {}
          }
        },
        "implicitDependencies": [],
        "tags": []
      }
    },
    {
      "name": "library",
      "type": "lib",
      "data": {
        "root": "library",
        "name": "library",
        "metadata": {
          "technologies": ["gradle"]
        },
        "targets": {
          "assemble": {
            "options": {
              "cwd": "library",
              "command": "../gradlew assemble"
            },
            "cache": true,
            "executor": "nx:run-commands",
            "configurations": {}
          },
          "build": {
            "options": {
              "cwd": "library",
              "command": "../gradlew build"
            },
            "cache": true,
            "inputs": ["production", "^production"],
            "outputs": ["{workspaceRoot}/library/build"],
            "dependsOn": ["^build", "classes"],
            "executor": "nx:run-commands",
            "configurations": {}
          },
          "buildDependents": {
            "options": {
              "cwd": "library",
              "command": "../gradlew buildDependents"
            },
            "cache": true,
            "executor": "nx:run-commands",
            "configurations": {}
          },
          "buildNeeded": {
            "options": {
              "cwd": "library",
              "command": "../gradlew buildNeeded"
            },
            "cache": true,
            "executor": "nx:run-commands",
            "configurations": {}
          },
          "classes": {
            "options": {
              "cwd": "library",
              "command": "../gradlew classes"
            },
            "cache": true,
            "inputs": ["default", "^default"],
            "outputs": ["{workspaceRoot}/library/build/classes"],
            "dependsOn": ["^classes"],
            "executor": "nx:run-commands",
            "configurations": {}
          },
          "clean": {
            "options": {
              "cwd": "library",
              "command": "../gradlew clean"
            },
            "cache": true,
            "executor": "nx:run-commands",
            "configurations": {}
          },
          "jar": {
            "options": {
              "cwd": "library",
              "command": "../gradlew jar"
            },
            "cache": true,
            "executor": "nx:run-commands",
            "configurations": {}
          },
          "testClasses": {
            "options": {
              "cwd": "library",
              "command": "../gradlew testClasses"
            },
            "cache": true,
            "executor": "nx:run-commands",
            "configurations": {}
          },
          "javadoc": {
            "options": {
              "cwd": "library",
              "command": "../gradlew javadoc"
            },
            "cache": false,
            "executor": "nx:run-commands",
            "configurations": {}
          },
          "buildEnvironment": {
            "options": {
              "cwd": "library",
              "command": "../gradlew buildEnvironment"
            },
            "cache": false,
            "executor": "nx:run-commands",
            "configurations": {}
          },
          "dependencies": {
            "options": {
              "cwd": "library",
              "command": "../gradlew dependencies"
            },
            "cache": false,
            "executor": "nx:run-commands",
            "configurations": {}
          },
          "dependencyInsight": {
            "options": {
              "cwd": "library",
              "command": "../gradlew dependencyInsight"
            },
            "cache": false,
            "executor": "nx:run-commands",
            "configurations": {}
          },
          "dependencyManagement": {
            "options": {
              "cwd": "library",
              "command": "../gradlew dependencyManagement"
            },
            "cache": false,
            "executor": "nx:run-commands",
            "configurations": {}
          },
          "help": {
            "options": {
              "cwd": "library",
              "command": "../gradlew help"
            },
            "cache": false,
            "executor": "nx:run-commands",
            "configurations": {}
          },
          "javaToolchains": {
            "options": {
              "cwd": "library",
              "command": "../gradlew javaToolchains"
            },
            "cache": false,
            "executor": "nx:run-commands",
            "configurations": {}
          },
          "outgoingVariants": {
            "options": {
              "cwd": "library",
              "command": "../gradlew outgoingVariants"
            },
            "cache": false,
            "executor": "nx:run-commands",
            "configurations": {}
          },
          "projects": {
            "options": {
              "cwd": "library",
              "command": "../gradlew projects"
            },
            "cache": false,
            "executor": "nx:run-commands",
            "configurations": {}
          },
          "properties": {
            "options": {
              "cwd": "library",
              "command": "../gradlew properties"
            },
            "cache": false,
            "executor": "nx:run-commands",
            "configurations": {}
          },
          "resolvableConfigurations": {
            "options": {
              "cwd": "library",
              "command": "../gradlew resolvableConfigurations"
            },
            "cache": false,
            "executor": "nx:run-commands",
            "configurations": {}
          },
          "tasks": {
            "options": {
              "cwd": "library",
              "command": "../gradlew tasks"
            },
            "cache": false,
            "executor": "nx:run-commands",
            "configurations": {}
          },
          "projectReport": {
            "options": {
              "cwd": "library",
              "command": "../gradlew projectReport"
            },
            "cache": false,
            "outputs": ["{workspaceRoot}/library/build/reports/project"],
            "executor": "nx:run-commands",
            "configurations": {}
          },
          "check": {
            "options": {
              "cwd": "library",
              "command": "../gradlew check"
            },
            "cache": true,
            "executor": "nx:run-commands",
            "configurations": {}
          },
          "test": {
            "options": {
              "cwd": "library",
              "command": "../gradlew test"
            },
            "cache": true,
            "inputs": ["default", "^production"],
            "dependsOn": ["classes"],
            "executor": "nx:run-commands",
            "configurations": {}
          }
        },
        "implicitDependencies": [],
        "tags": []
      }
    },
    {
      "name": "gradle-tutorial",
      "type": "lib",
      "data": {
        "root": ".",
        "name": "gradle-tutorial",
        "metadata": {
          "technologies": ["gradle"]
        },
        "targets": {
          "bootRun": {
            "options": {
              "cwd": ".",
              "command": "gradlew bootRun"
            },
            "cache": false,
            "executor": "nx:run-commands",
            "configurations": {}
          },
          "bootTestRun": {
            "options": {
              "cwd": ".",
              "command": "gradlew bootTestRun"
            },
            "cache": false,
            "executor": "nx:run-commands",
            "configurations": {}
          },
          "assemble": {
            "options": {
              "cwd": ".",
              "command": "gradlew assemble"
            },
            "cache": true,
            "executor": "nx:run-commands",
            "configurations": {}
          },
          "bootBuildImage": {
            "options": {
              "cwd": ".",
              "command": "gradlew bootBuildImage"
            },
            "cache": true,
            "executor": "nx:run-commands",
            "configurations": {}
          },
          "bootJar": {
            "options": {
              "cwd": ".",
              "command": "gradlew bootJar"
            },
            "cache": true,
            "executor": "nx:run-commands",
            "configurations": {}
          },
          "build": {
            "options": {
              "cwd": ".",
              "command": "gradlew build"
            },
            "cache": true,
            "inputs": ["production", "^production"],
            "outputs": ["{workspaceRoot}/build"],
            "dependsOn": ["^build", "classes"],
            "executor": "nx:run-commands",
            "configurations": {}
          },
          "buildDependents": {
            "options": {
              "cwd": ".",
              "command": "gradlew buildDependents"
            },
            "cache": true,
            "executor": "nx:run-commands",
            "configurations": {}
          },
          "buildNeeded": {
            "options": {
              "cwd": ".",
              "command": "gradlew buildNeeded"
            },
            "cache": true,
            "executor": "nx:run-commands",
            "configurations": {}
          },
          "classes": {
            "options": {
              "cwd": ".",
              "command": "gradlew classes"
            },
            "cache": true,
            "inputs": ["default", "^default"],
            "outputs": ["{workspaceRoot}/build/classes"],
            "dependsOn": ["^classes"],
            "executor": "nx:run-commands",
            "configurations": {}
          },
          "clean": {
            "options": {
              "cwd": ".",
              "command": "gradlew clean"
            },
            "cache": true,
            "executor": "nx:run-commands",
            "configurations": {}
          },
          "jar": {
            "options": {
              "cwd": ".",
              "command": "gradlew jar"
            },
            "cache": true,
            "executor": "nx:run-commands",
            "configurations": {}
          },
          "resolveMainClassName": {
            "options": {
              "cwd": ".",
              "command": "gradlew resolveMainClassName"
            },
            "cache": true,
            "executor": "nx:run-commands",
            "configurations": {}
          },
          "resolveTestMainClassName": {
            "options": {
              "cwd": ".",
              "command": "gradlew resolveTestMainClassName"
            },
            "cache": true,
            "executor": "nx:run-commands",
            "configurations": {}
          },
          "testClasses": {
            "options": {
              "cwd": ".",
              "command": "gradlew testClasses"
            },
            "cache": true,
            "executor": "nx:run-commands",
            "configurations": {}
          },
          "init": {
            "options": {
              "cwd": ".",
              "command": "gradlew init"
            },
            "cache": false,
            "executor": "nx:run-commands",
            "configurations": {}
          },
          "wrapper": {
            "options": {
              "cwd": ".",
              "command": "gradlew wrapper"
            },
            "cache": false,
            "executor": "nx:run-commands",
            "configurations": {}
          },
          "javadoc": {
            "options": {
              "cwd": ".",
              "command": "gradlew javadoc"
            },
            "cache": false,
            "executor": "nx:run-commands",
            "configurations": {}
          },
          "buildEnvironment": {
            "options": {
              "cwd": ".",
              "command": "gradlew buildEnvironment"
            },
            "cache": false,
            "executor": "nx:run-commands",
            "configurations": {}
          },
          "dependencies": {
            "options": {
              "cwd": ".",
              "command": "gradlew dependencies"
            },
            "cache": false,
            "executor": "nx:run-commands",
            "configurations": {}
          },
          "dependencyInsight": {
            "options": {
              "cwd": ".",
              "command": "gradlew dependencyInsight"
            },
            "cache": false,
            "executor": "nx:run-commands",
            "configurations": {}
          },
          "dependencyManagement": {
            "options": {
              "cwd": ".",
              "command": "gradlew dependencyManagement"
            },
            "cache": false,
            "executor": "nx:run-commands",
            "configurations": {}
          },
          "help": {
            "options": {
              "cwd": ".",
              "command": "gradlew help"
            },
            "cache": false,
            "executor": "nx:run-commands",
            "configurations": {}
          },
          "javaToolchains": {
            "options": {
              "cwd": ".",
              "command": "gradlew javaToolchains"
            },
            "cache": false,
            "executor": "nx:run-commands",
            "configurations": {}
          },
          "outgoingVariants": {
            "options": {
              "cwd": ".",
              "command": "gradlew outgoingVariants"
            },
            "cache": false,
            "executor": "nx:run-commands",
            "configurations": {}
          },
          "projects": {
            "options": {
              "cwd": ".",
              "command": "gradlew projects"
            },
            "cache": false,
            "executor": "nx:run-commands",
            "configurations": {}
          },
          "properties": {
            "options": {
              "cwd": ".",
              "command": "gradlew properties"
            },
            "cache": false,
            "executor": "nx:run-commands",
            "configurations": {}
          },
          "resolvableConfigurations": {
            "options": {
              "cwd": ".",
              "command": "gradlew resolvableConfigurations"
            },
            "cache": false,
            "executor": "nx:run-commands",
            "configurations": {}
          },
          "tasks": {
            "options": {
              "cwd": ".",
              "command": "gradlew tasks"
            },
            "cache": false,
            "executor": "nx:run-commands",
            "configurations": {}
          },
          "projectReport": {
            "options": {
              "cwd": ".",
              "command": "gradlew projectReport"
            },
            "cache": false,
            "outputs": ["{workspaceRoot}/build/reports/project"],
            "executor": "nx:run-commands",
            "configurations": {}
          },
          "check": {
            "options": {
              "cwd": ".",
              "command": "gradlew check"
            },
            "cache": true,
            "executor": "nx:run-commands",
            "configurations": {}
          },
          "test": {
            "options": {
              "cwd": ".",
              "command": "gradlew test"
            },
            "cache": true,
            "inputs": ["default", "^production"],
            "dependsOn": ["classes"],
            "executor": "nx:run-commands",
            "configurations": {}
          }
        },
        "implicitDependencies": [],
        "tags": []
      }
    }
  ],
  "dependencies": {
    "application": [
      {
        "source": "application",
        "target": "library",
        "type": "static"
      }
    ],
    "library": [],
    "gradle-tutorial": [
      {
        "source": "gradle-tutorial",
        "target": "application",
        "type": "static"
      },
      {
        "source": "gradle-tutorial",
        "target": "library",
        "type": "static"
      }
    ]
  },
  "fileMap": {
    "gradle-tutorial": [
      {
        "file": ".gitignore",
        "hash": "14909406639319951657"
      },
      {
        "file": ".mvn/wrapper/maven-wrapper.jar",
        "hash": "4599048718252132452"
      },
      {
        "file": ".mvn/wrapper/maven-wrapper.properties",
        "hash": "14062264138023377782"
      },
      {
        "file": ".nx/nxw.js",
        "hash": "11254603345854076312"
      },
      {
        "file": "README.md",
        "hash": "2143394647937164316"
      },
      {
        "file": "build.gradle",
        "hash": "6776876968973565169"
      },
      {
        "file": "gradle/wrapper/gradle-wrapper.jar",
        "hash": "4964452923295747250"
      },
      {
        "file": "gradle/wrapper/gradle-wrapper.properties",
        "hash": "6992607940248896982"
      },
      {
        "file": "gradlew",
        "hash": "6979324130797723579"
      },
      {
        "file": "gradlew.bat",
        "hash": "8837338129170646035"
      },
      {
        "file": "nx",
        "hash": "17165975525224888679"
      },
      {
        "file": "nx.bat",
        "hash": "16828809655253213278"
      },
      {
        "file": "nx.json",
        "hash": "16332841804597347663"
      },
      {
        "file": "settings.gradle",
        "hash": "5690477904066095133"
      }
    ],
    "application": [
      {
        "file": "application/build.gradle",
        "hash": "13223387111008998466",
        "deps": ["library"]
      },
      {
        "file": "application/settings.gradle",
        "hash": "18286272227920383284"
      },
      {
        "file": "application/src/main/java/com/example/multimodule/application/DemoApplication.java",
        "hash": "117361831080317523"
      },
      {
        "file": "application/src/main/resources/application.properties",
        "hash": "18341909134911292471"
      },
      {
        "file": "application/src/test/java/com/example/multimodule/application/DemoApplicationTest.java",
        "hash": "12794301020412404095"
      }
    ],
    "library": [
      {
        "file": "library/build.gradle",
        "hash": "10874096726061397019"
      },
      {
        "file": "library/settings.gradle",
        "hash": "13735992102452590570"
      },
      {
        "file": "library/src/main/java/com/example/multimodule/service/MyService.java",
        "hash": "1785389597461451392"
      },
      {
        "file": "library/src/main/java/com/example/multimodule/service/ServiceProperties.java",
        "hash": "5222601539204689670"
      },
      {
        "file": "library/src/test/java/com/example/multimodule/service/MyServiceTest.java",
        "hash": "7173828893536126792"
      }
    ]
  },
  "workspaceLayout": {
    "appsDir": "apps",
    "libsDir": "libs"
  },
  "affectedProjectIds": [],
  "focus": null,
  "groupByFolder": false,
  "exclude": [],
  "isPartial": false
}
```

{% /graph %}

## Running tasks

Nx is a task runner built for monorepos. It can run a single task for a single project, a task for all projects, and
even intelligently run a subset of tasks based on the changes you've made in your repository. Nx also has sophisticated
Computation caching to reuse the results of tasks. Explore how Nx adds to the task running Gradle provides.

Before we start running tasks, let's explore the tasks available for the `application` project. The `@nx/gradle` plugin
that we've installed reflects Gradle's tasks to Nx, which allows it to run any of the Gradle tasks defined for that project. You can view the available tasks either through [Nx Console](/docs/getting-started/editor-setup) or from the terminal:

```shell
nx show project application
```

{% project_details title="Project Details View" expandedTargets=["build"] height="520px" %}

```json
{
  "project": {
    "name": "application",
    "type": "lib",
    "data": {
      "root": "application",
      "name": "application",
      "metadata": {
        "targetGroups": {
          "Application": ["bootRun", "bootTestRun"],
          "Build": [
            "assemble",
            "bootBuildImage",
            "bootJar",
            "build",
            "buildDependents",
            "buildNeeded",
            "classes",
            "clean",
            "jar",
            "resolveMainClassName",
            "resolveTestMainClassName",
            "testClasses"
          ],
          "Documentation": ["javadoc"],
          "Help": [
            "buildEnvironment",
            "dependencies",
            "dependencyInsight",
            "dependencyManagement",
            "help",
            "javaToolchains",
            "outgoingVariants",
            "projects",
            "properties",
            "resolvableConfigurations",
            "tasks"
          ],
          "Reporting": ["projectReport"],
          "Verification": ["check", "test"]
        },
        "technologies": ["gradle"]
      },
      "targets": {
        "bootRun": {
          "cache": false,
          "metadata": {
            "technologies": ["gradle"]
          },
          "executor": "nx:run-commands",
          "options": {
            "command": "./gradlew :application:bootRun"
          },
          "configurations": {}
        },
        "bootTestRun": {
          "cache": false,
          "metadata": {
            "technologies": ["gradle"]
          },
          "executor": "nx:run-commands",
          "options": {
            "command": "./gradlew :application:bootTestRun"
          },
          "configurations": {}
        },
        "assemble": {
          "cache": true,
          "metadata": {
            "technologies": ["gradle"]
          },
          "executor": "nx:run-commands",
          "options": {
            "command": "./gradlew :application:assemble"
          },
          "configurations": {}
        },
        "bootBuildImage": {
          "cache": true,
          "metadata": {
            "technologies": ["gradle"]
          },
          "executor": "nx:run-commands",
          "options": {
            "command": "./gradlew :application:bootBuildImage"
          },
          "configurations": {}
        },
        "bootJar": {
          "cache": true,
          "metadata": {
            "technologies": ["gradle"]
          },
          "executor": "nx:run-commands",
          "options": {
            "command": "./gradlew :application:bootJar"
          },
          "configurations": {}
        },
        "build": {
          "cache": true,
          "inputs": ["production", "^production"],
          "outputs": ["{workspaceRoot}/application/build"],
          "dependsOn": ["^build", "classes"],
          "metadata": {
            "technologies": ["gradle"]
          },
          "executor": "nx:run-commands",
          "options": {
            "command": "./gradlew :application:build"
          },
          "configurations": {}
        },
        "buildDependents": {
          "cache": true,
          "metadata": {
            "technologies": ["gradle"]
          },
          "executor": "nx:run-commands",
          "options": {
            "command": "./gradlew :application:buildDependents"
          },
          "configurations": {}
        },
        "buildNeeded": {
          "cache": true,
          "metadata": {
            "technologies": ["gradle"]
          },
          "executor": "nx:run-commands",
          "options": {
            "command": "./gradlew :application:buildNeeded"
          },
          "configurations": {}
        },
        "classes": {
          "cache": true,
          "inputs": ["production", "^production"],
          "outputs": ["{workspaceRoot}/application/build/classes"],
          "dependsOn": ["^classes"],
          "metadata": {
            "technologies": ["gradle"]
          },
          "executor": "nx:run-commands",
          "options": {
            "command": "./gradlew :application:classes"
          },
          "configurations": {}
        },
        "clean": {
          "cache": true,
          "metadata": {
            "technologies": ["gradle"]
          },
          "executor": "nx:run-commands",
          "options": {
            "command": "./gradlew :application:clean"
          },
          "configurations": {}
        },
        "jar": {
          "cache": true,
          "metadata": {
            "technologies": ["gradle"]
          },
          "executor": "nx:run-commands",
          "options": {
            "command": "./gradlew :application:jar"
          },
          "configurations": {}
        },
        "resolveMainClassName": {
          "cache": true,
          "metadata": {
            "technologies": ["gradle"]
          },
          "executor": "nx:run-commands",
          "options": {
            "command": "./gradlew :application:resolveMainClassName"
          },
          "configurations": {}
        },
        "resolveTestMainClassName": {
          "cache": true,
          "metadata": {
            "technologies": ["gradle"]
          },
          "executor": "nx:run-commands",
          "options": {
            "command": "./gradlew :application:resolveTestMainClassName"
          },
          "configurations": {}
        },
        "testClasses": {
          "cache": true,
          "metadata": {
            "technologies": ["gradle"]
          },
          "executor": "nx:run-commands",
          "options": {
            "command": "./gradlew :application:testClasses"
          },
          "configurations": {}
        },
        "javadoc": {
          "cache": false,
          "metadata": {
            "technologies": ["gradle"]
          },
          "executor": "nx:run-commands",
          "options": {
            "command": "./gradlew :application:javadoc"
          },
          "configurations": {}
        },
        "buildEnvironment": {
          "cache": false,
          "metadata": {
            "technologies": ["gradle"]
          },
          "executor": "nx:run-commands",
          "options": {
            "command": "./gradlew :application:buildEnvironment"
          },
          "configurations": {}
        },
        "dependencies": {
          "cache": false,
          "metadata": {
            "technologies": ["gradle"]
          },
          "executor": "nx:run-commands",
          "options": {
            "command": "./gradlew :application:dependencies"
          },
          "configurations": {}
        },
        "dependencyInsight": {
          "cache": false,
          "metadata": {
            "technologies": ["gradle"]
          },
          "executor": "nx:run-commands",
          "options": {
            "command": "./gradlew :application:dependencyInsight"
          },
          "configurations": {}
        },
        "dependencyManagement": {
          "cache": false,
          "metadata": {
            "technologies": ["gradle"]
          },
          "executor": "nx:run-commands",
          "options": {
            "command": "./gradlew :application:dependencyManagement"
          },
          "configurations": {}
        },
        "help": {
          "cache": false,
          "metadata": {
            "technologies": ["gradle"]
          },
          "executor": "nx:run-commands",
          "options": {
            "command": "./gradlew :application:help"
          },
          "configurations": {}
        },
        "javaToolchains": {
          "cache": false,
          "metadata": {
            "technologies": ["gradle"]
          },
          "executor": "nx:run-commands",
          "options": {
            "command": "./gradlew :application:javaToolchains"
          },
          "configurations": {}
        },
        "outgoingVariants": {
          "cache": false,
          "metadata": {
            "technologies": ["gradle"]
          },
          "executor": "nx:run-commands",
          "options": {
            "command": "./gradlew :application:outgoingVariants"
          },
          "configurations": {}
        },
        "projects": {
          "cache": false,
          "metadata": {
            "technologies": ["gradle"]
          },
          "executor": "nx:run-commands",
          "options": {
            "command": "./gradlew :application:projects"
          },
          "configurations": {}
        },
        "properties": {
          "cache": false,
          "metadata": {
            "technologies": ["gradle"]
          },
          "executor": "nx:run-commands",
          "options": {
            "command": "./gradlew :application:properties"
          },
          "configurations": {}
        },
        "resolvableConfigurations": {
          "cache": false,
          "metadata": {
            "technologies": ["gradle"]
          },
          "executor": "nx:run-commands",
          "options": {
            "command": "./gradlew :application:resolvableConfigurations"
          },
          "configurations": {}
        },
        "tasks": {
          "cache": false,
          "metadata": {
            "technologies": ["gradle"]
          },
          "executor": "nx:run-commands",
          "options": {
            "command": "./gradlew :application:tasks"
          },
          "configurations": {}
        },
        "projectReport": {
          "cache": false,
          "outputs": ["{workspaceRoot}/application/build/reports/project"],
          "metadata": {
            "technologies": ["gradle"]
          },
          "executor": "nx:run-commands",
          "options": {
            "command": "./gradlew :application:projectReport"
          },
          "configurations": {}
        },
        "check": {
          "cache": true,
          "metadata": {
            "technologies": ["gradle"]
          },
          "executor": "nx:run-commands",
          "options": {
            "command": "./gradlew :application:check"
          },
          "configurations": {}
        },
        "test": {
          "cache": true,
          "inputs": ["default", "^production"],
          "dependsOn": ["classes"],
          "metadata": {
            "technologies": ["gradle"]
          },
          "executor": "nx:run-commands",
          "options": {
            "command": "./gradlew :application:test"
          },
          "configurations": {}
        }
      },
      "implicitDependencies": [],
      "tags": []
    }
  },
  "sourceMap": {
    "root": ["application/build.gradle", "@nx/gradle"],
    "name": ["application/build.gradle", "@nx/gradle"],
    "metadata.targetGroups": ["application/build.gradle", "@nx/gradle"],
    "metadata.targetGroups.Application": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "metadata.targetGroups.Application.0": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "metadata.targetGroups.Application.1": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "metadata.targetGroups.Build": ["application/build.gradle", "@nx/gradle"],
    "metadata.targetGroups.Build.0": ["application/build.gradle", "@nx/gradle"],
    "metadata.targetGroups.Build.1": ["application/build.gradle", "@nx/gradle"],
    "metadata.targetGroups.Build.2": ["application/build.gradle", "@nx/gradle"],
    "metadata.targetGroups.Build.3": ["application/build.gradle", "@nx/gradle"],
    "metadata.targetGroups.Build.4": ["application/build.gradle", "@nx/gradle"],
    "metadata.targetGroups.Build.5": ["application/build.gradle", "@nx/gradle"],
    "metadata.targetGroups.Build.6": ["application/build.gradle", "@nx/gradle"],
    "metadata.targetGroups.Build.7": ["application/build.gradle", "@nx/gradle"],
    "metadata.targetGroups.Build.8": ["application/build.gradle", "@nx/gradle"],
    "metadata.targetGroups.Build.9": ["application/build.gradle", "@nx/gradle"],
    "metadata.targetGroups.Build.10": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "metadata.targetGroups.Build.11": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "metadata.targetGroups.Documentation": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "metadata.targetGroups.Documentation.0": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "metadata.targetGroups.Help": ["application/build.gradle", "@nx/gradle"],
    "metadata.targetGroups.Help.0": ["application/build.gradle", "@nx/gradle"],
    "metadata.targetGroups.Help.1": ["application/build.gradle", "@nx/gradle"],
    "metadata.targetGroups.Help.2": ["application/build.gradle", "@nx/gradle"],
    "metadata.targetGroups.Help.3": ["application/build.gradle", "@nx/gradle"],
    "metadata.targetGroups.Help.4": ["application/build.gradle", "@nx/gradle"],
    "metadata.targetGroups.Help.5": ["application/build.gradle", "@nx/gradle"],
    "metadata.targetGroups.Help.6": ["application/build.gradle", "@nx/gradle"],
    "metadata.targetGroups.Help.7": ["application/build.gradle", "@nx/gradle"],
    "metadata.targetGroups.Help.8": ["application/build.gradle", "@nx/gradle"],
    "metadata.targetGroups.Help.9": ["application/build.gradle", "@nx/gradle"],
    "metadata.targetGroups.Help.10": ["application/build.gradle", "@nx/gradle"],
    "metadata.targetGroups.Reporting": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "metadata.targetGroups.Reporting.0": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "metadata.targetGroups.Verification": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "metadata.targetGroups.Verification.0": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "metadata.targetGroups.Verification.1": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "metadata.technologies": ["application/build.gradle", "@nx/gradle"],
    "metadata.technologies.0": ["application/build.gradle", "@nx/gradle"],
    "targets": ["application/build.gradle", "@nx/gradle"],
    "targets.bootRun": ["application/build.gradle", "@nx/gradle"],
    "targets.bootRun.cache": ["application/build.gradle", "@nx/gradle"],
    "targets.bootRun.inputs": ["application/build.gradle", "@nx/gradle"],
    "targets.bootRun.outputs": ["application/build.gradle", "@nx/gradle"],
    "targets.bootRun.dependsOn": ["application/build.gradle", "@nx/gradle"],
    "targets.bootRun.metadata": ["application/build.gradle", "@nx/gradle"],
    "targets.bootRun.executor": ["application/build.gradle", "@nx/gradle"],
    "targets.bootRun.options": ["application/build.gradle", "@nx/gradle"],
    "targets.bootRun.options.command": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.bootRun.metadata.technologies": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.bootRun.metadata.technologies.0": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.bootTestRun": ["application/build.gradle", "@nx/gradle"],
    "targets.bootTestRun.cache": ["application/build.gradle", "@nx/gradle"],
    "targets.bootTestRun.inputs": ["application/build.gradle", "@nx/gradle"],
    "targets.bootTestRun.outputs": ["application/build.gradle", "@nx/gradle"],
    "targets.bootTestRun.dependsOn": ["application/build.gradle", "@nx/gradle"],
    "targets.bootTestRun.metadata": ["application/build.gradle", "@nx/gradle"],
    "targets.bootTestRun.executor": ["application/build.gradle", "@nx/gradle"],
    "targets.bootTestRun.options": ["application/build.gradle", "@nx/gradle"],
    "targets.bootTestRun.options.command": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.bootTestRun.metadata.technologies": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.bootTestRun.metadata.technologies.0": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.assemble": ["application/build.gradle", "@nx/gradle"],
    "targets.assemble.cache": ["application/build.gradle", "@nx/gradle"],
    "targets.assemble.inputs": ["application/build.gradle", "@nx/gradle"],
    "targets.assemble.outputs": ["application/build.gradle", "@nx/gradle"],
    "targets.assemble.dependsOn": ["application/build.gradle", "@nx/gradle"],
    "targets.assemble.metadata": ["application/build.gradle", "@nx/gradle"],
    "targets.assemble.executor": ["application/build.gradle", "@nx/gradle"],
    "targets.assemble.options": ["application/build.gradle", "@nx/gradle"],
    "targets.assemble.options.command": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.assemble.metadata.technologies": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.assemble.metadata.technologies.0": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.bootBuildImage": ["application/build.gradle", "@nx/gradle"],
    "targets.bootBuildImage.cache": ["application/build.gradle", "@nx/gradle"],
    "targets.bootBuildImage.inputs": ["application/build.gradle", "@nx/gradle"],
    "targets.bootBuildImage.outputs": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.bootBuildImage.dependsOn": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.bootBuildImage.metadata": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.bootBuildImage.executor": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.bootBuildImage.options": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.bootBuildImage.options.command": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.bootBuildImage.metadata.technologies": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.bootBuildImage.metadata.technologies.0": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.bootJar": ["application/build.gradle", "@nx/gradle"],
    "targets.bootJar.cache": ["application/build.gradle", "@nx/gradle"],
    "targets.bootJar.inputs": ["application/build.gradle", "@nx/gradle"],
    "targets.bootJar.outputs": ["application/build.gradle", "@nx/gradle"],
    "targets.bootJar.dependsOn": ["application/build.gradle", "@nx/gradle"],
    "targets.bootJar.metadata": ["application/build.gradle", "@nx/gradle"],
    "targets.bootJar.executor": ["application/build.gradle", "@nx/gradle"],
    "targets.bootJar.options": ["application/build.gradle", "@nx/gradle"],
    "targets.bootJar.options.command": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.bootJar.metadata.technologies": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.bootJar.metadata.technologies.0": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.build": ["application/build.gradle", "@nx/gradle"],
    "targets.build.cache": ["application/build.gradle", "@nx/gradle"],
    "targets.build.inputs": ["application/build.gradle", "@nx/gradle"],
    "targets.build.outputs": ["application/build.gradle", "@nx/gradle"],
    "targets.build.dependsOn": ["application/build.gradle", "@nx/gradle"],
    "targets.build.metadata": ["application/build.gradle", "@nx/gradle"],
    "targets.build.executor": ["application/build.gradle", "@nx/gradle"],
    "targets.build.options": ["application/build.gradle", "@nx/gradle"],
    "targets.build.options.command": ["application/build.gradle", "@nx/gradle"],
    "targets.build.metadata.technologies": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.build.metadata.technologies.0": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.buildDependents": ["application/build.gradle", "@nx/gradle"],
    "targets.buildDependents.cache": ["application/build.gradle", "@nx/gradle"],
    "targets.buildDependents.inputs": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.buildDependents.outputs": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.buildDependents.dependsOn": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.buildDependents.metadata": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.buildDependents.executor": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.buildDependents.options": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.buildDependents.options.command": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.buildDependents.metadata.technologies": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.buildDependents.metadata.technologies.0": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.buildNeeded": ["application/build.gradle", "@nx/gradle"],
    "targets.buildNeeded.cache": ["application/build.gradle", "@nx/gradle"],
    "targets.buildNeeded.inputs": ["application/build.gradle", "@nx/gradle"],
    "targets.buildNeeded.outputs": ["application/build.gradle", "@nx/gradle"],
    "targets.buildNeeded.dependsOn": ["application/build.gradle", "@nx/gradle"],
    "targets.buildNeeded.metadata": ["application/build.gradle", "@nx/gradle"],
    "targets.buildNeeded.executor": ["application/build.gradle", "@nx/gradle"],
    "targets.buildNeeded.options": ["application/build.gradle", "@nx/gradle"],
    "targets.buildNeeded.options.command": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.buildNeeded.metadata.technologies": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.buildNeeded.metadata.technologies.0": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.classes": ["application/build.gradle", "@nx/gradle"],
    "targets.classes.cache": ["application/build.gradle", "@nx/gradle"],
    "targets.classes.inputs": ["application/build.gradle", "@nx/gradle"],
    "targets.classes.outputs": ["application/build.gradle", "@nx/gradle"],
    "targets.classes.dependsOn": ["application/build.gradle", "@nx/gradle"],
    "targets.classes.metadata": ["application/build.gradle", "@nx/gradle"],
    "targets.classes.executor": ["application/build.gradle", "@nx/gradle"],
    "targets.classes.options": ["application/build.gradle", "@nx/gradle"],
    "targets.classes.options.command": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.classes.metadata.technologies": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.classes.metadata.technologies.0": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.clean": ["application/build.gradle", "@nx/gradle"],
    "targets.clean.cache": ["application/build.gradle", "@nx/gradle"],
    "targets.clean.inputs": ["application/build.gradle", "@nx/gradle"],
    "targets.clean.outputs": ["application/build.gradle", "@nx/gradle"],
    "targets.clean.dependsOn": ["application/build.gradle", "@nx/gradle"],
    "targets.clean.metadata": ["application/build.gradle", "@nx/gradle"],
    "targets.clean.executor": ["application/build.gradle", "@nx/gradle"],
    "targets.clean.options": ["application/build.gradle", "@nx/gradle"],
    "targets.clean.options.command": ["application/build.gradle", "@nx/gradle"],
    "targets.clean.metadata.technologies": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.clean.metadata.technologies.0": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.jar": ["application/build.gradle", "@nx/gradle"],
    "targets.jar.cache": ["application/build.gradle", "@nx/gradle"],
    "targets.jar.inputs": ["application/build.gradle", "@nx/gradle"],
    "targets.jar.outputs": ["application/build.gradle", "@nx/gradle"],
    "targets.jar.dependsOn": ["application/build.gradle", "@nx/gradle"],
    "targets.jar.metadata": ["application/build.gradle", "@nx/gradle"],
    "targets.jar.executor": ["application/build.gradle", "@nx/gradle"],
    "targets.jar.options": ["application/build.gradle", "@nx/gradle"],
    "targets.jar.options.command": ["application/build.gradle", "@nx/gradle"],
    "targets.jar.metadata.technologies": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.jar.metadata.technologies.0": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.resolveMainClassName": ["application/build.gradle", "@nx/gradle"],
    "targets.resolveMainClassName.cache": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.resolveMainClassName.inputs": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.resolveMainClassName.outputs": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.resolveMainClassName.dependsOn": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.resolveMainClassName.metadata": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.resolveMainClassName.executor": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.resolveMainClassName.options": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.resolveMainClassName.options.command": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.resolveMainClassName.metadata.technologies": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.resolveMainClassName.metadata.technologies.0": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.resolveTestMainClassName": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.resolveTestMainClassName.cache": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.resolveTestMainClassName.inputs": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.resolveTestMainClassName.outputs": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.resolveTestMainClassName.dependsOn": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.resolveTestMainClassName.metadata": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.resolveTestMainClassName.executor": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.resolveTestMainClassName.options": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.resolveTestMainClassName.options.command": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.resolveTestMainClassName.metadata.technologies": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.resolveTestMainClassName.metadata.technologies.0": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.testClasses": ["application/build.gradle", "@nx/gradle"],
    "targets.testClasses.cache": ["application/build.gradle", "@nx/gradle"],
    "targets.testClasses.inputs": ["application/build.gradle", "@nx/gradle"],
    "targets.testClasses.outputs": ["application/build.gradle", "@nx/gradle"],
    "targets.testClasses.dependsOn": ["application/build.gradle", "@nx/gradle"],
    "targets.testClasses.metadata": ["application/build.gradle", "@nx/gradle"],
    "targets.testClasses.executor": ["application/build.gradle", "@nx/gradle"],
    "targets.testClasses.options": ["application/build.gradle", "@nx/gradle"],
    "targets.testClasses.options.command": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.testClasses.metadata.technologies": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.testClasses.metadata.technologies.0": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.javadoc": ["application/build.gradle", "@nx/gradle"],
    "targets.javadoc.cache": ["application/build.gradle", "@nx/gradle"],
    "targets.javadoc.inputs": ["application/build.gradle", "@nx/gradle"],
    "targets.javadoc.outputs": ["application/build.gradle", "@nx/gradle"],
    "targets.javadoc.dependsOn": ["application/build.gradle", "@nx/gradle"],
    "targets.javadoc.metadata": ["application/build.gradle", "@nx/gradle"],
    "targets.javadoc.executor": ["application/build.gradle", "@nx/gradle"],
    "targets.javadoc.options": ["application/build.gradle", "@nx/gradle"],
    "targets.javadoc.options.command": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.javadoc.metadata.technologies": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.javadoc.metadata.technologies.0": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.buildEnvironment": ["application/build.gradle", "@nx/gradle"],
    "targets.buildEnvironment.cache": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.buildEnvironment.inputs": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.buildEnvironment.outputs": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.buildEnvironment.dependsOn": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.buildEnvironment.metadata": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.buildEnvironment.executor": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.buildEnvironment.options": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.buildEnvironment.options.command": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.buildEnvironment.metadata.technologies": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.buildEnvironment.metadata.technologies.0": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.dependencies": ["application/build.gradle", "@nx/gradle"],
    "targets.dependencies.cache": ["application/build.gradle", "@nx/gradle"],
    "targets.dependencies.inputs": ["application/build.gradle", "@nx/gradle"],
    "targets.dependencies.outputs": ["application/build.gradle", "@nx/gradle"],
    "targets.dependencies.dependsOn": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.dependencies.metadata": ["application/build.gradle", "@nx/gradle"],
    "targets.dependencies.executor": ["application/build.gradle", "@nx/gradle"],
    "targets.dependencies.options": ["application/build.gradle", "@nx/gradle"],
    "targets.dependencies.options.command": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.dependencies.metadata.technologies": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.dependencies.metadata.technologies.0": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.dependencyInsight": ["application/build.gradle", "@nx/gradle"],
    "targets.dependencyInsight.cache": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.dependencyInsight.inputs": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.dependencyInsight.outputs": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.dependencyInsight.dependsOn": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.dependencyInsight.metadata": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.dependencyInsight.executor": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.dependencyInsight.options": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.dependencyInsight.options.command": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.dependencyInsight.metadata.technologies": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.dependencyInsight.metadata.technologies.0": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.dependencyManagement": ["application/build.gradle", "@nx/gradle"],
    "targets.dependencyManagement.cache": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.dependencyManagement.inputs": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.dependencyManagement.outputs": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.dependencyManagement.dependsOn": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.dependencyManagement.metadata": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.dependencyManagement.executor": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.dependencyManagement.options": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.dependencyManagement.options.command": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.dependencyManagement.metadata.technologies": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.dependencyManagement.metadata.technologies.0": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.help": ["application/build.gradle", "@nx/gradle"],
    "targets.help.cache": ["application/build.gradle", "@nx/gradle"],
    "targets.help.inputs": ["application/build.gradle", "@nx/gradle"],
    "targets.help.outputs": ["application/build.gradle", "@nx/gradle"],
    "targets.help.dependsOn": ["application/build.gradle", "@nx/gradle"],
    "targets.help.metadata": ["application/build.gradle", "@nx/gradle"],
    "targets.help.executor": ["application/build.gradle", "@nx/gradle"],
    "targets.help.options": ["application/build.gradle", "@nx/gradle"],
    "targets.help.options.command": ["application/build.gradle", "@nx/gradle"],
    "targets.help.metadata.technologies": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.help.metadata.technologies.0": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.javaToolchains": ["application/build.gradle", "@nx/gradle"],
    "targets.javaToolchains.cache": ["application/build.gradle", "@nx/gradle"],
    "targets.javaToolchains.inputs": ["application/build.gradle", "@nx/gradle"],
    "targets.javaToolchains.outputs": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.javaToolchains.dependsOn": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.javaToolchains.metadata": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.javaToolchains.executor": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.javaToolchains.options": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.javaToolchains.options.command": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.javaToolchains.metadata.technologies": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.javaToolchains.metadata.technologies.0": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.outgoingVariants": ["application/build.gradle", "@nx/gradle"],
    "targets.outgoingVariants.cache": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.outgoingVariants.inputs": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.outgoingVariants.outputs": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.outgoingVariants.dependsOn": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.outgoingVariants.metadata": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.outgoingVariants.executor": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.outgoingVariants.options": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.outgoingVariants.options.command": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.outgoingVariants.metadata.technologies": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.outgoingVariants.metadata.technologies.0": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.projects": ["application/build.gradle", "@nx/gradle"],
    "targets.projects.cache": ["application/build.gradle", "@nx/gradle"],
    "targets.projects.inputs": ["application/build.gradle", "@nx/gradle"],
    "targets.projects.outputs": ["application/build.gradle", "@nx/gradle"],
    "targets.projects.dependsOn": ["application/build.gradle", "@nx/gradle"],
    "targets.projects.metadata": ["application/build.gradle", "@nx/gradle"],
    "targets.projects.executor": ["application/build.gradle", "@nx/gradle"],
    "targets.projects.options": ["application/build.gradle", "@nx/gradle"],
    "targets.projects.options.command": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.projects.metadata.technologies": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.projects.metadata.technologies.0": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.properties": ["application/build.gradle", "@nx/gradle"],
    "targets.properties.cache": ["application/build.gradle", "@nx/gradle"],
    "targets.properties.inputs": ["application/build.gradle", "@nx/gradle"],
    "targets.properties.outputs": ["application/build.gradle", "@nx/gradle"],
    "targets.properties.dependsOn": ["application/build.gradle", "@nx/gradle"],
    "targets.properties.metadata": ["application/build.gradle", "@nx/gradle"],
    "targets.properties.executor": ["application/build.gradle", "@nx/gradle"],
    "targets.properties.options": ["application/build.gradle", "@nx/gradle"],
    "targets.properties.options.command": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.properties.metadata.technologies": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.properties.metadata.technologies.0": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.resolvableConfigurations": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.resolvableConfigurations.cache": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.resolvableConfigurations.inputs": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.resolvableConfigurations.outputs": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.resolvableConfigurations.dependsOn": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.resolvableConfigurations.metadata": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.resolvableConfigurations.executor": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.resolvableConfigurations.options": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.resolvableConfigurations.options.command": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.resolvableConfigurations.metadata.technologies": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.resolvableConfigurations.metadata.technologies.0": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.tasks": ["application/build.gradle", "@nx/gradle"],
    "targets.tasks.cache": ["application/build.gradle", "@nx/gradle"],
    "targets.tasks.inputs": ["application/build.gradle", "@nx/gradle"],
    "targets.tasks.outputs": ["application/build.gradle", "@nx/gradle"],
    "targets.tasks.dependsOn": ["application/build.gradle", "@nx/gradle"],
    "targets.tasks.metadata": ["application/build.gradle", "@nx/gradle"],
    "targets.tasks.executor": ["application/build.gradle", "@nx/gradle"],
    "targets.tasks.options": ["application/build.gradle", "@nx/gradle"],
    "targets.tasks.options.command": ["application/build.gradle", "@nx/gradle"],
    "targets.tasks.metadata.technologies": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.tasks.metadata.technologies.0": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.projectReport": ["application/build.gradle", "@nx/gradle"],
    "targets.projectReport.cache": ["application/build.gradle", "@nx/gradle"],
    "targets.projectReport.inputs": ["application/build.gradle", "@nx/gradle"],
    "targets.projectReport.outputs": ["application/build.gradle", "@nx/gradle"],
    "targets.projectReport.dependsOn": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.projectReport.metadata": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.projectReport.executor": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.projectReport.options": ["application/build.gradle", "@nx/gradle"],
    "targets.projectReport.options.command": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.projectReport.metadata.technologies": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.projectReport.metadata.technologies.0": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.check": ["application/build.gradle", "@nx/gradle"],
    "targets.check.cache": ["application/build.gradle", "@nx/gradle"],
    "targets.check.inputs": ["application/build.gradle", "@nx/gradle"],
    "targets.check.outputs": ["application/build.gradle", "@nx/gradle"],
    "targets.check.dependsOn": ["application/build.gradle", "@nx/gradle"],
    "targets.check.metadata": ["application/build.gradle", "@nx/gradle"],
    "targets.check.executor": ["application/build.gradle", "@nx/gradle"],
    "targets.check.options": ["application/build.gradle", "@nx/gradle"],
    "targets.check.options.command": ["application/build.gradle", "@nx/gradle"],
    "targets.check.metadata.technologies": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.check.metadata.technologies.0": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.test": ["application/build.gradle", "@nx/gradle"],
    "targets.test.cache": ["application/build.gradle", "@nx/gradle"],
    "targets.test.inputs": ["application/build.gradle", "@nx/gradle"],
    "targets.test.outputs": ["application/build.gradle", "@nx/gradle"],
    "targets.test.dependsOn": ["application/build.gradle", "@nx/gradle"],
    "targets.test.metadata": ["application/build.gradle", "@nx/gradle"],
    "targets.test.executor": ["application/build.gradle", "@nx/gradle"],
    "targets.test.options": ["application/build.gradle", "@nx/gradle"],
    "targets.test.options.command": ["application/build.gradle", "@nx/gradle"],
    "targets.test.metadata.technologies": [
      "application/build.gradle",
      "@nx/gradle"
    ],
    "targets.test.metadata.technologies.0": [
      "application/build.gradle",
      "@nx/gradle"
    ]
  }
}
```

{% /project_details %}

The Nx command to run the `build` task for the `application` project is:

```shell
nx run application:build
```

When Nx runs a Gradle task, it hands off the execution of that task to Gradle, so all task dependencies and
configuration settings in the Gradle configuration are still respected.

By running the task via Nx, however, the task computation was cached for reuse. Now, running `nx run application:build`
again, will complete almost instantly as the result from the previous execution will be used.

```text {% title="nx run application:build"%}

   ✔  1/1 dependent project tasks succeeded [1 read from cache]

   Hint: you can run the command with --verbose to see the full dependent project outputs

—————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————


> nx run application:classes  [existing outputs match the cache, left as is]

> ./gradlew :application:classes

> Task :library:compileJava UP-TO-DATE
> Task :library:processResources NO-SOURCE
> Task :library:classes UP-TO-DATE
> Task :library:jar UP-TO-DATE
> Task :application:compileJava UP-TO-DATE
> Task :application:processResources UP-TO-DATE
> Task :application:classes UP-TO-DATE

BUILD SUCCESSFUL in 647ms
4 actionable tasks: 4 up-to-date

> nx run application:build  [existing outputs match the cache, left as is]

> ./gradlew :application:build


Deprecated Gradle features were used in this build, making it incompatible with Gradle 9.0.

You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.

For more on this, please refer to https://docs.gradle.org/8.5/userguide/command_line_interface.html#sec:command_line_warnings in the Gradle documentation.

BUILD SUCCESSFUL in 768ms
9 actionable tasks: 1 executed, 8 up-to-date

—————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————

 NX   Successfully ran target build for project application and 3 tasks it depends on (30ms)

Nx read the output from the cache instead of running the command for 4 out of 4 tasks.
```

Now that we've run one task, let's run all the `build` tasks in the repository with the Nx `run-many` command. This is similar to Gradle's `./gradlew build` command.

```text {% title="nx run-many -t build"%}

   ✔  nx run library:classes  [existing outputs match the cache, left as is]
   ✔  nx run library:build  [existing outputs match the cache, left as is]
   ✔  nx run application:classes  [existing outputs match the cache, left as is]
   ✔  nx run application:build  [existing outputs match the cache, left as is]
   ✔  nx run gradle-tutorial:classes (1s)
   ✔  nx run gradle-tutorial:build (1s)

—————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————

 NX   Successfully ran target build for 3 projects and 3 tasks they depend on (2s)

Nx read the output from the cache instead of running the command for 4 out of 6 tasks.
```

Again, because Nx cached the tasks when the application was built, most of the tasks here were near instant. The only
ones which needed to be done is the root project's build. Running the command one more time, will be near instant as
then all the tasks will be restored from the cache.

### Remote cache for faster development

With Nx Cloud connected, your task results are now cached remotely. This means that if another developer runs the same tasks, or if you run them in CI, the results will be retrieved from the remote cache instead of being re-executed.

Try running the build again after making a small change to see how Nx intelligently determines which tasks need to be re-run:

```shell
nx run-many -t build
```

You'll notice that only the affected projects need to rebuild, while others are restored from cache.

## Self-Healing CI with Nx Cloud

Explore how Nx Cloud can help your pull request get to green faster with self-healing CI.

You can copy the example GitHub Action workflow file and place it in the `.github/workflows/ci.yml` directory of your repository. This workflow will run the `lint`, `test`, and `build` tasks for all projects in your repository whenever a pull request is opened or updated.

The `npx nx fix-ci` command that is already included in your GitHub Actions workflow (`github/workflows/ci.yml`) is responsible for enabling self-healing CI and will automatically suggest fixes to your failing tasks.

```yaml {% meta="{34,35}" %}
# .github/workflows/ci.yml
name: CI

on:
  push:
    branches:
      - main
  pull_request:

permissions:
  actions: read
  contents: read

jobs:
  main:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          filter: tree:0
          fetch-depth: 0
      - uses: actions/setup-node@v4
        with:
          node-version: 22
      - name: Set up JDK 21 for x64
        uses: actions/setup-java@v4
        with:
          java-version: '21'
          distribution: 'temurin'
          architecture: x64
      - name: Setup Gradle
        uses: gradle/actions/setup-gradle@v4
      - run: npx nx run-many -t lint test build
      - run: npx nx fix-ci
        if: always()
```

You will also need to install the [Nx Console](/docs/getting-started/editor-setup) editor extension for VS Code, Cursor, or IntelliJ. For the complete AI setup guide, see our [AI integration documentation](/docs/getting-started/ai-setup).

{% install_nx_console /%}

### Open a pull request

Start by making a new branch to work on.

```shell
git checkout -b self-healing-ci
```

Now for demo purposes, we'll make a mistake in our `DemoApplication` class that will cause the build to fail.

```diff {% meta="lang='java'" %}
// application/src/main/java/com/example/multimodule/application/DemoApplication.java
    @GetMapping("/")
    public String home() {
+       return myService.messages();
-       return myService.message();
    }
```

Commit the changes and open a new PR on GitHub.

```shell
git add .
git commit -m 'demo self-healing ci'
git push origin self-healing-ci
```

Once pushed, CI will kick off, and we'll run into an error for the `application:build` task.
When the build task fails, you'll see Nx Cloud begin to analyze the failure and suggest a fix. When a fix is proposed, Nx Console will show a notification for you to review the potential fix. From here you can reject or apply the fix. Applying the fix will commit back to your PR and re-trigger CI to run.

You can also see the fix link on the GitHub PR comment that Nx Cloud leaves.

![Nx Cloud PR comment with AI fix suggestion](../../../../assets/tutorials/nx-cloud-gh-comment-self-healing-coment.avif)

From here you can manually apply or reject the fix:

![Nx Cloud apply AI fix suggestion](../../../../assets/tutorials/nx-cloud-apply-fix-self-healing-ci.avif)

For more information about how Nx can improve your CI pipeline, check out our [CI guides](/docs/guides/nx-cloud/setup-ci)

## Summary

Now that you have added Nx to this sample Gradle repository, you have learned several ways that Nx can help your
organization:

- Nx reflects the Gradle graph into the Nx graph
- Nx dependency graph visualisation helps you understand your codebase
- Nx caches task results and reuses them when the same task is rerun later
- Nx Cloud provides self-healing CI and remote caching to speed up CI
- Nx [intelligently determines which tasks are `affected`](/docs/features/ci-features/affected) by code changes to reduce waste in CI

## Next steps

Connect with the rest of the Nx community with these resources:

- ⭐️ [Star us on GitHub](https://github.com/nrwl/nx) to show your support and stay updated on new releases!
- [Join the Official Nx Discord Server](https://go.nx.dev/community) to ask questions and find out the latest news about
  Nx.
- [Follow Nx on Twitter](https://twitter.con/nxdevtools) to stay up to date with Nx news
- [Read our Nx blog](https://nx.dev/blog)
- [Subscribe to our Youtube channel](https://www.youtube.com/@nxdevtools) for demos and Nx insights
