Hello,
Please advise why does gradle 7.5 chooses lower version of a dependency which is declared in ‘api’ configuration with a higher version?
We have this in one of the libraries:
api("io.kubernetes:client-java:18.0.0")
When that library is used in another project, gradle somehow resolves that transitive ‘client-java’ dependency to 13.0.2:
./gradlew dependencyInsight --dependency io.kubernetes:client-java --configuration cucumber
Skipping Maven repo publishing setup for project <root> because no extension property 'dkType' is set for it
> Task :dependencyInsight
io.kubernetes:client-java:13.0.2 (selected by rule)
Variant runtime:
| Attribute Name | Provided | Requested |
|----------------------------|--------------|-----------|
| org.gradle.category | library | |
| org.gradle.libraryelements | jar | |
| org.gradle.status | release | |
| org.gradle.usage | java-runtime | |
io.kubernetes:client-java:18.0.0 -> 13.0.2
\--- com.jago.common:k8s-test-environment:1.14.36
+--- com.jago.common:k8s-test-redis-environment:1.14.36
| \--- cucumber
+--- com.jago.common:k8s-test-kafka-environment:1.14.36
| \--- com.jago.common:k8s-kafka-cucumber:1.14.36
| \--- cucumber
\--- com.jago.common:k8s-test-mongo-environment:1.14.36
\--- com.jago.common:k8s-mongo-cucumber:1.14.36
\--- cucumber
io.kubernetes:client-java-api:13.0.2
Variant runtime:
| Attribute Name | Provided | Requested |
|----------------------------|--------------|-----------|
| org.gradle.category | library | |
| org.gradle.libraryelements | jar | |
| org.gradle.status | release | |
| org.gradle.usage | java-runtime | |
io.kubernetes:client-java-api:13.0.2
\--- io.kubernetes:client-java:13.0.2
\--- com.jago.common:k8s-test-environment:1.14.36 (requested io.kubernetes:client-java:18.0.0)
+--- com.jago.common:k8s-test-redis-environment:1.14.36
| \--- cucumber
+--- com.jago.common:k8s-test-kafka-environment:1.14.36
| \--- com.jago.common:k8s-kafka-cucumber:1.14.36
| \--- cucumber
\--- com.jago.common:k8s-test-mongo-environment:1.14.36
\--- com.jago.common:k8s-mongo-cucumber:1.14.36
\--- cucumber
io.kubernetes:client-java-proto:13.0.2
Variant runtime:
| Attribute Name | Provided | Requested |
|----------------------------|--------------|-----------|
| org.gradle.category | library | |
| org.gradle.libraryelements | jar | |
| org.gradle.status | release | |
| org.gradle.usage | java-runtime | |
io.kubernetes:client-java-proto:13.0.2
\--- io.kubernetes:client-java:13.0.2
\--- com.jago.common:k8s-test-environment:1.14.36 (requested io.kubernetes:client-java:18.0.0)
+--- com.jago.common:k8s-test-redis-environment:1.14.36
| \--- cucumber
+--- com.jago.common:k8s-test-kafka-environment:1.14.36
| \--- com.jago.common:k8s-kafka-cucumber:1.14.36
| \--- cucumber
\--- com.jago.common:k8s-test-mongo-environment:1.14.36
\--- com.jago.common:k8s-mongo-cucumber:1.14.36
\--- cucumber
(*) - dependencies omitted (listed previously)
A web-based, searchable dependency report is available by adding the --scan option.
Deprecated Gradle features were used in this build, making it incompatible with Gradle 8.0.
You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.
See https://docs.gradle.org/7.5/userguide/command_line_interface.html#sec:command_line_warnings
- we don’t use any custom dependency resolution strategy in the project
- we declare that io.kubernetes:client-java dependency in a single place and it has version 18.0.0 there (as mentioned above)
The problem was workarounded by explicitly declaring not only ‘client-java’ but ‘client-java-api’ and ‘client-java-proto’ in ‘api’ configuration like below:
val k8sDependencyVersion = "18.0.0"
api("io.kubernetes:client-java:$k8sDependencyVersion")
api("io.kubernetes:client-java-api:$k8sDependencyVersion")
api("io.kubernetes:client-java-proto:$k8sDependencyVersion")
Please advise on the unexpected initial version resolution - what is the reason for that?