Build Environment
| Interested in configuring your Build Cache to speed up builds? Register here for our Build Cache training session to learn some of the tips and tricks top engineering teams are using to increase build speed. |
Gradle provides multiple mechanisms for configuring behavior of Gradle itself and specific projects. The following is a reference for using these mechanisms.
When configuring Gradle behavior you can use these methods, listed in order of highest to lowest precedence (first one wins):
-
Command-line flags such as
--build-cache. These have precedence over properties and environment variables. -
System properties such as
systemProp.http.proxyHost=somehost.orgstored in agradle.propertiesfile in a root project directory. -
Gradle properties such as
org.gradle.caching=truethat are typically stored in agradle.propertiesfile in a project directory or in theGRADLE_USER_HOME. -
Environment variables such as
GRADLE_OPTSsourced by the environment that executes Gradle.
Aside from configuring Gradle behavior you can configure the build using the same mechanisms and reading the environment from the build logic.
Gradle properties
Gradle provides several options that make it easy to configure the Java process that will be used to execute your build. While it’s possible to configure these in your local environment via GRADLE_OPTS or JAVA_OPTS, it is useful to be able to store certain settings like JVM memory configuration and Java home location in version control so that an entire team can work with a consistent environment. To do so, place these settings into a gradle.properties file committed to your version control system.
The final configuration taken into account by Gradle is a combination of all Gradle properties set on the command line and your gradle.properties files. If an option is configured in multiple locations, the first one found in any of these locations wins:
-
command line, as set using
-D. -
gradle.propertiesinGRADLE_USER_HOMEdirectory. -
gradle.propertiesin the project’s directory, then its parent project’s directory up to the build’s root directory. -
gradle.propertiesin Gradle installation directory.
Note that the location of the Gradle User Home may have been changed beforehand via the -Dgradle.user.home system property passed on the command line.
The following properties can be used to configure the Gradle build environment:
org.gradle.caching=(true,false)-
When set to true, Gradle will reuse task outputs from any previous build, when possible, resulting in much faster builds. Learn more about using the build cache. By default, the build cache is not enabled.
org.gradle.caching.debug=(true,false)-
When set to true, individual input property hashes and the build cache key for each task are logged on the console. Learn more about task output caching. Default is
false. org.gradle.configuration-cache=(true,false)-
Enables configuration caching. Gradle will try to reuse the build configuration from previous builds. Default is
false. org.gradle.configuration-cache.problems=(fail,warn)-
Configures how the configuration cache handles problems. Set to
warnto report problems without failing the build. Set tofailto report problems and fail the build if there are any problems. Default isfail. org.gradle.configuration-cache.max-problems=(# of problems)-
Configures the maximum number of configuration cache problems allowed as warnings until Gradle fails the build. Default is
512. org.gradle.configureondemand=(true,false)-
Enables incubating configuration on demand, where Gradle will attempt to configure only necessary projects. Default is
false. org.gradle.console=(auto,plain,rich,verbose)-
Customize console output coloring or verbosity. Default depends on how Gradle is invoked. See command-line logging for additional details.
org.gradle.continuous.quietperiod=(# of quiet period millis)-
When using continuous build, Gradle will wait for the quiet period to pass before triggering another build. Any additional changes within this quiet period restart waiting for the quiet period. Default is
250milliseconds. org.gradle.daemon=(true,false)-
When set to
truethe Gradle Daemon is used to run the build. Default istrue, builds will be run using the daemon. org.gradle.daemon.idletimeout=(# of idle millis)-
Gradle Daemon will terminate itself after specified number of idle milliseconds. Default is
10800000(3 hours). org.gradle.debug=(true,false)-
When set to
true, Gradle will run the build with remote debugging enabled, listening on port 5005. Note that this is the equivalent of adding-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005to the JVM command line and will suspend the virtual machine until a debugger is attached. Default isfalse. org.gradle.debug.host=(host address)-
Specifies the host address to listen on or connect to when debug is enabled. In the server mode on Java 9 and above, passing
*for the host will make the server listen on all network interfaces. By default, no host address is passed to JDWP, so on Java 9 and above, the loopback address is used, while earlier versions listen on all interfaces. org.gradle.debug.port=(port number)-
Specifies the port number to listen on when debug is enabled. Default is
5005. org.gradle.debug.server=(true,false)-
If set to
trueand debugging is enabled, Gradle will run the build with the socket-attach mode of the debugger. Otherwise, the socket-listen mode is used. Default istrue. org.gradle.debug.suspend=(true,false)-
When set to
trueand debugging is enabled, the JVM running Gradle will suspend until a debugger is attached. Default istrue. org.gradle.java.home=(path to JDK home)-
Specifies the Java home for the Gradle build process. The value can be set to either a
jdkorjrelocation, however, depending on what your build does, using a JDK is safer. This does not affect the version of Java used to launch the Gradle client VM (see Environment variables). A reasonable default is derived from your environment (JAVA_HOMEor the path tojava) if the setting is unspecified. org.gradle.jvmargs=(JVM arguments)-
Specifies the JVM arguments used for the Gradle Daemon. The setting is particularly useful for configuring JVM memory settings for build performance. This does not affect the JVM settings for the Gradle client VM. The default is
-Xmx512m "-XX:MaxMetaspaceSize=384m". org.gradle.logging.level=(quiet,warn,lifecycle,info,debug)-
When set to quiet, warn, lifecycle, info, or debug, Gradle will use this log level. The values are not case sensitive. See Choosing a log level. The
lifecyclelevel is the default. org.gradle.logging.stacktrace=(internal,all,full)-
Specifies whether stacktraces should be displayed as part of the build result upon an exception. See also the --stacktrace command-line option. When set to
internal, a stacktrace is present in the output only in case of internal exceptions. When set toallorfull, a stacktrace is present in the output for all exceptions and build failures. Usingfulldoesn’t truncate the stacktrace, which leads to a much more verbose output. Default isinternal. org.gradle.parallel=(true,false)-
When configured, Gradle will fork up to
org.gradle.workers.maxJVMs to execute projects in parallel. To learn more about parallel task execution, see the section on Gradle build performance. Default isfalse. org.gradle.priority=(low,normal)-
Specifies the scheduling priority for the Gradle daemon and all processes launched by it. See also performance command-line options. Default is
normal. org.gradle.vfs.verbose=(true,false)-
Configures verbose logging when watching the file system. Default is
false. org.gradle.vfs.watch=(true,false)-
Toggles watching the file system. When enabled Gradle re-uses information it collects about the file system between builds. Enabled by default on operating systems where Gradle supports this feature.
org.gradle.warning.mode=(all,fail,summary,none)-
When set to
all,summaryornone, Gradle will use different warning type display. See Command-line logging options for details. Default issummary. org.gradle.welcome=(never,once)-
Controls whether Gradle should print a welcome message. If set to never then the welcome message will be suppressed. If set to once then the message is printed once for each new version of Gradle. Default is
once. org.gradle.workers.max=(max # of worker processes)-
When configured, Gradle will use a maximum of the given number of workers. See also performance command-line options. Default is number of CPU processors.
The following examples demonstrate how to use Gradle properties.
gradlePropertiesProp=gradlePropertiesValue
gradleProperties.with.dots=gradlePropertiesDottedValue
// Using the API, provides a lazy Provider<String>
println(providers.gradleProperty("gradlePropertiesProp").get())
// Using Kotlin delegated properties on `settings`
val gradlePropertiesProp: String by settings
println(gradlePropertiesProp)
// Using the API, provides a lazy Provider<String>
println(providers.gradleProperty("gradlePropertiesProp").get())
// Using Kotlin delegated properties on `project`
val gradlePropertiesProp: String by project
println(gradlePropertiesProp)
// Using the API, provides a lazy Provider<String>
println providers.gradleProperty('gradlePropertiesProp').get()
// Using Groovy dynamic names
println gradlePropertiesProp
println settings.gradlePropertiesProp
// Using Groovy dynamic array notation on `settings`
println settings['gradlePropertiesProp']
// Using the API, provides a lazy Provider<String>
println providers.gradleProperty('gradlePropertiesProp').get()
// Using Groovy dynamic names
println gradlePropertiesProp
println project.gradlePropertiesProp
// Using Groovy dynamic array notation on `project`
println project['gradlePropertiesProp']
The Kotlin delegated properties are part of the Gradle Kotlin DSL. You need to explicitly specify the type as