Description
We have a strange feature in the Spotless gradle plugin: googleJavaFormat('1.8')
The exact chain by which that 1.8
becomes a dependency that gets declared to Gradle is this:
the stacktrace
spotless/lib/src/main/java/com/diffplug/spotless/JarState.java
Lines 65 to 68 in 2ca0db1
spotless/lib/src/main/java/com/diffplug/spotless/JarState.java
Lines 86 to 90 in 2ca0db1
spotless/lib/src/main/java/com/diffplug/spotless/SpotlessCache.java
Lines 68 to 71 in 2ca0db1
In every Spotless before 6.0
, we resolved all formatter dependencies against the buildscript
repositories in the root project. That changed in 6.0 because of these two PRs:
- Resolve dependencies from "project" repositories, not buildscript #980 changed that to resolve against the normal project repositories in the root project
- Resolve dependencies per-project #983 changed that to resolve against the normal project repositories of each project where spotless was used
If you want the old behavior back, we're happy to take a PR which adds it as a feature like so.
// build.gradle (root project only)
spotless {
predeclareDeps()
// predeclareDepsFromBuildscript() to get pre-6.0 behavior
}
spotlessPredeclare {
// now you have to declare every formatter (including version) that you plan to use
// you don't need to set the target, that part doesn't matter
java { googleJavaFormat('1.4') }
}
// works/build.gradle
spotless {
java { googleJavaFormat('1.4') } // ok
}
// error/build.gradle
spotless {
java { googleJavaFormat('1.3') } // throws error at configuration time
}