We are excited to announce Gradle 9.8.0-20260806010017+0000 (released 2026-08-06).
This release features 1, 2, ... n, and more.
We would like to thank the following community members for their contributions to this release of Gradle:
Be sure to check out the public roadmap for insight into what's planned for future releases.
Switch your build to use Gradle 9.8.0-20260806010017+0000 by updating the wrapper in your project:
./gradlew :wrapper --gradle-version=9.8.0-20260806010017+0000 && ./gradlew :wrapper
See the Gradle 9.x upgrade guide to learn about deprecations, breaking changes, and other considerations when upgrading to Gradle 9.8.0-20260806010017+0000.
For Java, Groovy, Kotlin, and Android compatibility, see the full compatibility notes.
With this release, Gradle supports Java 27.
You can now run the Gradle daemon on Java 27, in addition to using it via toolchains:
java {
toolchain {
languageVersion = JavaLanguageVersion.of(27)
}
}
Some third-party tools (for example, PMD) do not yet support Java 27.
See the compatibility documentation for more details.
Gradle provides a Configuration Cache that improves build time by caching the result of the configuration phase and reusing it for subsequent builds.
Plugin authors testing Configuration Cache compatibility with TestKit previously had to parse console output to tell whether a cache entry was stored, reused, or discarded — an approach that broke whenever the wording of the console messages changed.
The BuildResult now exposes the outcome directly:
def result = GradleRunner.create()
.withProjectDir(projectDir)
.withArguments("myTask", "--configuration-cache")
.build()
assert result.configurationCacheOutcome == ConfigurationCacheOutcome.STORED
See ConfigurationCacheOutcome for the possible outcomes.
The outcome is also available to any Tooling API client through a new CONFIGURATION_CACHE progress event type.
See the Testing with the Configuration Cache section in the Gradle User Manual for more details.
Gradle provides a set of features and abstractions for testing JVM code, along with test reports to display results.
Gradle provides an intuitive command-line interface, detailed logs, and a structured problems report that helps developers quickly identify and resolve build issues.
Gradle provides rich APIs for build engineers and plugin authors, enabling the creation of custom, reusable build logic and better maintainability.
Build, settings, and init scripts, as well as task actions, can now look up commonly used Gradle services directly, without declaring an @Inject point or going through the objects.newInstance(...) ceremony:
tasks.register("cleanReports") {
val fs = service<FileSystemOperations>()
doLast {
fs.delete { delete("build/reports") }
}
}
Use service(Class) in the Groovy DSL or service<Type>() in the Kotlin DSL. It is compatible with the Configuration Cache and Isolated Projects, and covers ObjectFactory, ProviderFactory, FileSystemOperations, and ArchiveOperations in every scope, ProjectLayout in projects and tasks, BuildLayout in settings, and ExecOperations in task actions. In the Kotlin and Java DSLs, looking up a service that is not available in the current scope is caught at compile time.
Precompiled script plugins that use service<Type>() require Gradle 9.8 or later at runtime.
See the Looking up services in scripts section in the Gradle User Manual for more details.
Gradle provides comprehensive support for Native development and JVM languages, featuring automated Toolchains for seamless JDK management.
The Groovydoc task now exposes configuration options that had previously only been available through the Groovy CLI, Ant task, or Maven plugin, closing a long-standing gap in Gradle's Groovydoc support.
Java source parsing level: Groovydoc uses JavaParser to read Java sources mixed into Groovy projects. When the parser's assumed language level is older than the sources, modern constructs — switch expressions, sealed classes, records, and similar — fail to parse, and the affected classes are silently omitted from the generated documentation. The new javaVersion property forwards the language level to Groovydoc so those sources parse cleanly:
tasks.groovydoc {
javaVersion = JavaLanguageVersion.of(21)
}
This option requires Groovy 4.0.27 or later and is silently ignored on earlier Groovy versions.
Groovy 6.0.0 documentation options: For projects using Groovy 6.0.0 or later, several new properties are now available on the Groovydoc task to control the generated output:
| Property | Purpose |
|---|---|
showInternal |
Include members annotated with groovy.transform.Internal (GEP-17). |
noIndex |
Suppress the alphabetical index page. |
noDeprecatedList |
Suppress the deprecated-list page. |
noHelp |
Suppress the help page. |
syntaxHighlighter |
Select the client-side syntax highlighter ("prism" or "none"). |
theme |
Lock the palette ("auto", "light", or "dark"). |
preLanguage |
Default language id applied to unclassified <pre> code blocks. |
additionalStylesheets |
Extra stylesheets copied alongside the default. |
All of these are silently ignored on earlier Groovy versions, so they are safe to configure in builds that may be run against multiple Groovy releases.
All new properties are incubating.
See the Groovydoc task in the DSL Reference for the full list of configuration options.
Gradle provides a comprehensive plugin system, including built-in Core Plugins for standard tasks and powerful APIs for creating custom plugins.
Gradle provides robust security features and underlying infrastructure to ensure that builds are secure, reproducible, and easy to maintain.
Gradle provides Tooling APIs that facilitate deep integration with modern IDEs and CI/CD pipelines.
Gradle provides various incremental updates and performance optimizations to ensure the continued reliability of the build ecosystem.
Promoted features are features that were incubating in previous versions of Gradle but are now supported and subject to backward compatibility. See the User Manual section on the "Feature Lifecycle" for more information.
The following are the features that have been promoted in this Gradle release.
Known issues are problems that were discovered post-release that are directly related to changes made in this release.
We love getting contributions from the Gradle community. For information on contributing, please see gradle.org/contribute.
If you find a problem with this release, please file a bug on GitHub Issues adhering to our issue guidelines. If you're not sure if you're encountering a bug, please use the forum.
We hope you will build happiness with Gradle, and we look forward to your feedback via Twitter or on GitHub.