How Gradle 6.6’s Configuration Caching Supercharges Build Performance
Gradle 6.6 introduces experimental configuration caching, runtime classpath normalization, and a new credentials API, all aimed at dramatically speeding up builds, improving cache hit rates, and simplifying secure artifact publishing for Java projects.
Gradle 6.6 has been released. Gradle is a project automation build tool based on Apache Ant and Maven concepts, supporting dependency management and multi‑project builds. It uses a Groovy‑based DSL instead of XML.
The biggest highlight is the experimental configuration caching feature, a major performance optimization that allows Gradle to skip the configuration phase and start executing tasks sooner.
Configuration Caching
Before any task runs, Gradle performs a configuration phase, which incurs significant overhead, especially for large projects. Configuration caching stores the result of this phase and reuses it for subsequent builds, dramatically improving build speed. When enabled, Gradle can also parallelize more tasks.
To enable the experimental feature, add the --configuration-cache flag on the command line or in the run configuration.
Standardized Runtime Classpath Improves Cache Hit Rate
Gradle now normalizes the runtime classpath when checking inputs for up‑to‑date and build cache. It inspects META-INF files and property files, ignoring comments, whitespace, and ordering differences, and can selectively ignore attributes that do not affect the runtime classpath.
normalization {
runtimeClasspath {
metaInf {
ignoreAttribute("Implementation-Version")
ignoreProperty("timestamp")
}
}
}This normalization increases the likelihood of cache hits for ZIP files on the classpath, especially JARs, but also AAR, WAR, and APK files.
Handling User‑Provided Credentials
Gradle 6.6 introduces a new API for credentials, allowing them to be supplied via Gradle properties (command‑line, environment variable, or gradle.properties). Missing credentials trigger a “fast‑fail” behavior.
Example of externalizing repository credentials:
repositories {
maven {
name = 'mySecureRepository'
credentials(PasswordCredentials)
// url = uri(<some repository url>)
}
}Gradle will look for properties mySecureRepositoryUsername and mySecureRepositoryPassword for the credentials.
The new provider API can also expose credentials to external tools:
tasks.register('login', Exec) {
def loginProvider = providers.credentials(PasswordCredentials, 'login')
inputs.property('credentials', loginProvider)
doFirst {
PasswordCredentials loginCredentials = loginProvider.get()
// use credentials
}
}Gradle searches for loginUsername and loginPassword properties.
Other improvements include support for the Java compiler --release flag, stability enhancements for file‑system watching, dependency‑management updates, and various bug fixes. See the full release notes at https://docs.gradle.org/6.6/release-notes.html.
Signed-in readers can open the original source through BestHub's protected redirect.
This article has been distilled and summarized from source material, then republished for learning and reference. If you believe it infringes your rights, please contactand we will review it promptly.
Programmer DD
A tinkering programmer and author of "Spring Cloud Microservices in Action"
How this landed with the community
Was this worth your time?
0 Comments
Thoughtful readers leave field notes, pushback, and hard-won operational detail here.
