Skip to content

Fix predeclare from buildscript in gradle 9.x#2929

Merged
nedtwigg merged 3 commits into
diffplug:mainfrom
bric3:predeclare-from-buildscript-gradle-9.x
May 14, 2026
Merged

Fix predeclare from buildscript in gradle 9.x#2929
nedtwigg merged 3 commits into
diffplug:mainfrom
bric3:predeclare-from-buildscript-gradle-9.x

Conversation

@bric3

@bric3 bric3 commented May 13, 2026

Copy link
Copy Markdown
Contributor

Gradle 9 rejects mutating the root buildscript configuration container during task execution. This breaks predeclareDepsFromBuildscript() because Spotless resolved formatter dependencies by calling ConfigurationContainer.create(...) from :spotlessInternalRegisterDependencies.

This commit makes spotless resolve the formatter dependencies with a detached configurations instead.

They are not added to the target configuration container, so they avoid the Gradle 9 mutation guard while still using the repositories from the same configuration context.

Also adds a Gradle 9.5.1 integration test for the legacy predeclareDepsFromBuildscript() path.

https://docs.gradle.org/current/userguide/upgrading_version_8.html#mutating_buildscript_configurations

https://docs.gradle.org/current/javadoc/org/gradle/api/artifacts/ConfigurationContainer.html#detachedConfiguration-org.gradle.api.artifacts.Dependency...-

Fixes #2599

bric3 added 3 commits May 13, 2026 13:35
Gradle 9 rejects mutating the root `buildscript` configuration container
during task execution. This breaks `predeclareDepsFromBuildscript()`
because Spotless resolved formatter dependencies by calling
`ConfigurationContainer.create(...)` from
`:spotlessInternalRegisterDependencies`.

This commit makes spotless resolve the formatter dependencies with
a detached configurations instead.

They are not added to the target configuration container, so they avoid
the Gradle 9 mutation guard while still using the repositories from the
same configuration context.

Also adds a Gradle 9.5.1 integration test for the legacy
`predeclareDepsFromBuildscript()` path.

https://docs.gradle.org/current/userguide/upgrading_version_8.html#mutating_buildscript_configurations

https://docs.gradle.org/current/javadoc/org/gradle/api/artifacts/ConfigurationContainer.html#detachedConfiguration-org.gradle.api.artifacts.Dependency...-

Fixes diffplug#2599
@nedtwigg nedtwigg merged commit ed86b24 into diffplug:main May 14, 2026
20 checks passed
AndreKurait added a commit to AndreKurait/opensearch-migrations that referenced this pull request Jun 4, 2026
8.4.0 has a known race in `GradleProvisioner.forConfigurationContainer`
where, under `org.gradle.parallel=true` with many subprojects, two
threads can both miss the dedup cache and both call
`configurations.create("spotless" + hash)` with the same name on the
root project's named container. Spotless's outer catch wraps the
resulting `InvalidUserDataException` into the misleading
"no repository for google-java-format" error.

Fixed in 8.5.0 via diffplug/spotless#2929 by switching to
`detachedConfiguration(...)`, which doesn't touch the named container
at all (issue diffplug/spotless#2599). No 8.4.x backport.

Bumping to 8.6.0 (current latest on the Gradle Plugin Portal).

Signed-off-by: Andre Kurait <akurait@amazon.com>
tonypiazza pushed a commit to tonypiazza/opensearch-migrations that referenced this pull request Jun 7, 2026
8.4.0 has a known race in `GradleProvisioner.forConfigurationContainer`
where, under `org.gradle.parallel=true` with many subprojects, two
threads can both miss the dedup cache and both call
`configurations.create("spotless" + hash)` with the same name on the
root project's named container. Spotless's outer catch wraps the
resulting `InvalidUserDataException` into the misleading
"no repository for google-java-format" error.

Fixed in 8.5.0 via diffplug/spotless#2929 by switching to
`detachedConfiguration(...)`, which doesn't touch the named container
at all (issue diffplug/spotless#2599). No 8.4.x backport.

Bumping to 8.6.0 (current latest on the Gradle Plugin Portal).

Signed-off-by: Tony Piazza <tony.piazza@aiven.io>
tonypiazza pushed a commit to tonypiazza/opensearch-migrations that referenced this pull request Jun 7, 2026
8.4.0 has a known race in `GradleProvisioner.forConfigurationContainer`
where, under `org.gradle.parallel=true` with many subprojects, two
threads can both miss the dedup cache and both call
`configurations.create("spotless" + hash)` with the same name on the
root project's named container. Spotless's outer catch wraps the
resulting `InvalidUserDataException` into the misleading
"no repository for google-java-format" error.

Fixed in 8.5.0 via diffplug/spotless#2929 by switching to
`detachedConfiguration(...)`, which doesn't touch the named container
at all (issue diffplug/spotless#2599). No 8.4.x backport.

Bumping to 8.6.0 (current latest on the Gradle Plugin Portal).

Signed-off-by: Tony Piazza <tony.piazza@aiven.io>

Signed-off-by: Tony Piazza <tony.piazza@aiven.io>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Gradle 9.0.0 incompatibility

2 participants