Unable to figure out how a transitive dependency of a particular version is ending up in my jar?

Unable to figure out how a transitive dependency of a particular version is ending up in my jar?

In my dependency section, I list guava 26.0-jre and I have jar task in my build.gradle so when I do gradle clean build and untar the jar and look at the guava version I see it is 19.0 instead of 26.0-jre

I did the following under myproject

gradle dependencies | grep guava
gradle dependencyInsight --configuration compile --dependency guava

none of them show 19.0 anywhere I only see 26.0-jre from these commands

but when I untar the jar and go to META_INF/maven. I can see the version of com.google.guava in pom.properties as 19.0 and because of this, I am getting NoSuchMethodError Exception at runtime.

How guava 19.0 ending up in my jar I have no idea. any thoughts?

Can you post your build.gradle file?

Where is this in your dependency list?

Can you try

"guava": [
  ...
  "com.google.guava:guava:${myVersions["guava"]}" {force = true}
  ...
]

My guess is Gradle deems version 19.0 is later than 26.0-jre. When you do your dependencies and depndencyInsight do you see something like for the guava artifact?

26.0-jre -> 19.0

That syntax quite doesnt work. I am using gradle 5.5 I get the following error

A problem occurred evaluating root project 
> Could not find method com.google.guava:guava:26.0-jre() for arguments [build_3uufvsp9qkamwyz35i3jqhl9r$_run_closure1$_closure4@3f141f92] on object of type org.gradle.api.internal.initialization.DefaultScriptHandler.

And no I don’t see any 19.0 in fact here is the output. gradle dependencyInsight --configuration compile --dependency guava

Configuration on demand is an incubating feature.

com.google.guava:failureaccess:1.0.1
   variant "runtime" [
      org.gradle.status   = release (not requested)
      org.gradle.usage    = java-runtime (not requested)
      org.gradle.category = library (not requested)
   ]

com.google.guava:failureaccess:1.0.1
+--- compile
\--- com.google.guava:guava:28.0-android
     +--- compile (requested com.google.guava:guava:26.0-jre)
     +--- io.grpc:grpc-protobuf:1.23.0 (requested com.google.guava:guava:26.0-android)
     |    +--- compile
     |    +--- io.grpc:grpc-all:1.23.0
     |    |    \--- compile
     |    +--- io.grpc:grpc-grpclb:1.23.0
     |    |    \--- compile
     |    \--- io.grpc:grpc-services:1.23.0
     |         \--- compile
     +--- io.grpc:grpc-protobuf-lite:1.23.0 (requested com.google.guava:guava:26.0-android)
     |    +--- compile
     |    \--- io.grpc:grpc-protobuf:1.23.0 (*)
     +--- io.grpc:grpc-api:1.23.0 (requested com.google.guava:guava:26.0-android)
     |    +--- compile
     |    +--- io.grpc:grpc-all:1.23.0 (requested io.grpc:grpc-api:[1.23.0]) (*)
     |    +--- io.grpc:grpc-auth:1.23.0 (requested io.grpc:grpc-api:[1.23.0])
     |    |    +--- compile
     |    |    \--- io.grpc:grpc-all:1.23.0 (*)
     |    +--- io.grpc:grpc-core:1.23.0 (requested io.grpc:grpc-api:[1.23.0])
     |    |    +--- compile
     |    |    +--- io.grpc:grpc-all:1.23.0 (requested io.grpc:grpc-core:[1.23.0]) (*)
     |    |    +--- io.grpc:grpc-grpclb:1.23.0 (requested io.grpc:grpc-core:[1.23.0]) (*)
     |    |    +--- io.grpc:grpc-netty-shaded:1.23.0 (requested io.grpc:grpc-core:[1.23.0])
     |    |    |    \--- compile
     |    |    +--- io.grpc:grpc-okhttp:1.23.0 (requested io.grpc:grpc-core:[1.23.0])
     |    |    |    +--- compile
     |    |    |    \--- io.grpc:grpc-all:1.23.0 (*)
     |    |    +--- io.grpc:grpc-services:1.23.0 (requested io.grpc:grpc-core:[1.23.0]) (*)
     |    |    +--- io.grpc:grpc-netty:1.23.0 (requested io.grpc:grpc-core:[1.23.0])
     |    |    |    \--- io.grpc:grpc-all:1.23.0 (*)
     |    |    \--- io.grpc:grpc-testing:1.23.0 (requested io.grpc:grpc-core:[1.23.0])
     |    |         \--- io.grpc:grpc-all:1.23.0 (*)
     |    +--- io.grpc:grpc-protobuf:1.23.0 (*)
     |    +--- io.grpc:grpc-protobuf-lite:1.23.0 (*)
     |    \--- io.grpc:grpc-stub:1.23.0
     |         +--- compile
     |         +--- io.grpc:grpc-all:1.23.0 (*)
     |         +--- io.grpc:grpc-grpclb:1.23.0 (*)
     |         +--- io.grpc:grpc-services:1.23.0 (*)
     |         \--- io.grpc:grpc-testing:1.23.0 (*)
     +--- com.atlassian.jira:jira-rest-java-client-api:5.1.6 (requested com.google.guava:guava:26.0-jre)
     |    +--- compile
     |    \--- com.atlassian.jira:jira-rest-java-client-core:5.1.6
     |         +--- compile
     |         \--- project :pipes (requested com.atlassian.jira:jira-rest-java-client-core:5.1.2-2bd0a62e)
     |              \--- compile
     \--- com.google.protobuf:protobuf-java-util:3.10.0
          +--- compile
          +--- io.grpc:grpc-grpclb:1.23.0 (requested com.google.protobuf:protobuf-java-util:3.9.0) (*)
          \--- io.grpc:grpc-services:1.23.0 (requested com.google.protobuf:protobuf-java-util:3.9.0) (*)

com.google.guava:guava:28.0-android
   variant "runtime" [
      org.gradle.status   = release (not requested)
      org.gradle.usage    = java-runtime (not requested)
      org.gradle.category = library (not requested)
   ]
   Selection reasons:
      - By conflict resolution : between versions 28.0-android, 26.0-jre and 26.0-android

com.google.guava:guava:28.0-android
\--- com.google.protobuf:protobuf-java-util:3.10.0
     +--- compile
     +--- io.grpc:grpc-grpclb:1.23.0 (requested com.google.protobuf:protobuf-java-util:3.9.0)
     |    \--- compile
     \--- io.grpc:grpc-services:1.23.0 (requested com.google.protobuf:protobuf-java-util:3.9.0)
          \--- compile

com.google.guava:guava:26.0-android -> 28.0-android
+--- io.grpc:grpc-api:1.23.0
|    +--- compile
|    +--- io.grpc:grpc-all:1.23.0 (requested io.grpc:grpc-api:[1.23.0])
|    |    \--- compile
|    +--- io.grpc:grpc-auth:1.23.0 (requested io.grpc:grpc-api:[1.23.0])
|    |    +--- compile
|    |    \--- io.grpc:grpc-all:1.23.0 (*)
|    +--- io.grpc:grpc-core:1.23.0 (requested io.grpc:grpc-api:[1.23.0])
|    |    +--- compile
|    |    +--- io.grpc:grpc-all:1.23.0 (requested io.grpc:grpc-core:[1.23.0]) (*)
|    |    +--- io.grpc:grpc-grpclb:1.23.0 (requested io.grpc:grpc-core:[1.23.0])
|    |    |    \--- compile
|    |    +--- io.grpc:grpc-netty-shaded:1.23.0 (requested io.grpc:grpc-core:[1.23.0])
|    |    |    \--- compile
|    |    +--- io.grpc:grpc-okhttp:1.23.0 (requested io.grpc:grpc-core:[1.23.0])
|    |    |    +--- compile
|    |    |    \--- io.grpc:grpc-all:1.23.0 (*)
|    |    +--- io.grpc:grpc-services:1.23.0 (requested io.grpc:grpc-core:[1.23.0])
|    |    |    \--- compile
|    |    +--- io.grpc:grpc-netty:1.23.0 (requested io.grpc:grpc-core:[1.23.0])
|    |    |    \--- io.grpc:grpc-all:1.23.0 (*)
|    |    \--- io.grpc:grpc-testing:1.23.0 (requested io.grpc:grpc-core:[1.23.0])
|    |         \--- io.grpc:grpc-all:1.23.0 (*)
|    +--- io.grpc:grpc-protobuf:1.23.0
|    |    +--- compile
|    |    +--- io.grpc:grpc-all:1.23.0 (*)
|    |    +--- io.grpc:grpc-grpclb:1.23.0 (*)
|    |    \--- io.grpc:grpc-services:1.23.0 (*)
|    +--- io.grpc:grpc-protobuf-lite:1.23.0
|    |    +--- compile
|    |    \--- io.grpc:grpc-protobuf:1.23.0 (*)
|    \--- io.grpc:grpc-stub:1.23.0
|         +--- compile
|         +--- io.grpc:grpc-all:1.23.0 (*)
|         +--- io.grpc:grpc-grpclb:1.23.0 (*)
|         +--- io.grpc:grpc-services:1.23.0 (*)
|         \--- io.grpc:grpc-testing:1.23.0 (*)
+--- io.grpc:grpc-protobuf:1.23.0 (*)
\--- io.grpc:grpc-protobuf-lite:1.23.0 (*)

com.google.guava:guava:26.0-jre -> 28.0-android
+--- compile
\--- com.atlassian.jira:jira-rest-java-client-api:5.1.6
     +--- compile
     \--- com.atlassian.jira:jira-rest-java-client-core:5.1.6
          +--- compile
          \--- project :pipes (requested com.atlassian.jira:jira-rest-java-client-core:5.1.2-2bd0a62e)
               \--- compile

com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava
   variant "runtime" [
      org.gradle.status   = release (not requested)
      org.gradle.usage    = java-runtime (not requested)
      org.gradle.category = library (not requested)
   ]

com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava
+--- compile
\--- com.google.guava:guava:28.0-android
     +--- compile (requested com.google.guava:guava:26.0-jre)
     +--- io.grpc:grpc-protobuf:1.23.0 (requested com.google.guava:guava:26.0-android)
     |    +--- compile
     |    +--- io.grpc:grpc-all:1.23.0
     |    |    \--- compile
     |    +--- io.grpc:grpc-grpclb:1.23.0
     |    |    \--- compile
     |    \--- io.grpc:grpc-services:1.23.0
     |         \--- compile
     +--- io.grpc:grpc-protobuf-lite:1.23.0 (requested com.google.guava:guava:26.0-android)
     |    +--- compile
     |    \--- io.grpc:grpc-protobuf:1.23.0 (*)
     +--- io.grpc:grpc-api:1.23.0 (requested com.google.guava:guava:26.0-android)
     |    +--- compile
     |    +--- io.grpc:grpc-all:1.23.0 (requested io.grpc:grpc-api:[1.23.0]) (*)
     |    +--- io.grpc:grpc-auth:1.23.0 (requested io.grpc:grpc-api:[1.23.0])
     |    |    +--- compile
     |    |    \--- io.grpc:grpc-all:1.23.0 (*)
     |    +--- io.grpc:grpc-core:1.23.0 (requested io.grpc:grpc-api:[1.23.0])
     |    |    +--- compile
     |    |    +--- io.grpc:grpc-all:1.23.0 (requested io.grpc:grpc-core:[1.23.0]) (*)
     |    |    +--- io.grpc:grpc-grpclb:1.23.0 (requested io.grpc:grpc-core:[1.23.0]) (*)
     |    |    +--- io.grpc:grpc-netty-shaded:1.23.0 (requested io.grpc:grpc-core:[1.23.0])
     |    |    |    \--- compile
     |    |    +--- io.grpc:grpc-okhttp:1.23.0 (requested io.grpc:grpc-core:[1.23.0])
     |    |    |    +--- compile
     |    |    |    \--- io.grpc:grpc-all:1.23.0 (*)
     |    |    +--- io.grpc:grpc-services:1.23.0 (requested io.grpc:grpc-core:[1.23.0]) (*)
     |    |    +--- io.grpc:grpc-netty:1.23.0 (requested io.grpc:grpc-core:[1.23.0])
     |    |    |    \--- io.grpc:grpc-all:1.23.0 (*)
     |    |    \--- io.grpc:grpc-testing:1.23.0 (requested io.grpc:grpc-core:[1.23.0])
     |    |         \--- io.grpc:grpc-all:1.23.0 (*)
     |    +--- io.grpc:grpc-protobuf:1.23.0 (*)
     |    +--- io.grpc:grpc-protobuf-lite:1.23.0 (*)
     |    \--- io.grpc:grpc-stub:1.23.0
     |         +--- compile
     |         +--- io.grpc:grpc-all:1.23.0 (*)
     |         +--- io.grpc:grpc-grpclb:1.23.0 (*)
     |         +--- io.grpc:grpc-services:1.23.0 (*)
     |         \--- io.grpc:grpc-testing:1.23.0 (*)
     +--- com.atlassian.jira:jira-rest-java-client-api:5.1.6 (requested com.google.guava:guava:26.0-jre)
     |    +--- compile
     |    \--- com.atlassian.jira:jira-rest-java-client-core:5.1.6
     |         +--- compile
     |         \--- project :pipes (requested com.atlassian.jira:jira-rest-java-client-core:5.1.2-2bd0a62e)
     |              \--- compile
     \--- com.google.protobuf:protobuf-java-util:3.10.0
          +--- compile
          +--- io.grpc:grpc-grpclb:1.23.0 (requested com.google.protobuf:protobuf-java-util:3.9.0) (*)
          \--- io.grpc:grpc-services:1.23.0 (requested com.google.protobuf:protobuf-java-util:3.9.0) (*)

(*) - dependencies omitted (listed previously)

A web-based, searchable dependency report is available by adding the --scan option.

BUILD SUCCESSFUL in 4s
1 actionable task: 1 executed

You somehow need to make the equivalent of this work in your fancy build.gradle files.

dependencies {
  ...
  compile ("com.google.guava:guava:26.0-jre") {force = true}
  ...
}

Maybe this in your sub-project?

dependencies {
  ...
  compile myModules['guava'] {force = true }
  ...
}

I see above though. The -> denotes that you’re no longer have what you wanted in your dependency tree.

I tried excluding 28.0-android and I still get the same result.
Also, I tried changing guava version to 20.0 since you said -jre can be an issue.

I both cases I see guava 19.0 in my myproject.jar

Did you try the second suggestions for {force = true} syntax?

Yes I got the same syntax problem so I tried this

configurations.all {
  resolutionStrategy {
    force "com.google.guava:guava:26.0-jre"
   }
}

Still the same result I see guava 19.0

#Generated by org.apache.felix.bundleplugin
#Wed Dec 09 15:58:23 EST 2015
version=19.0
groupId=com.google.guava
artifactId=guava

What version of Gradle are you using? You shouldn’t use compile, that’s not what Gradle uses when it resolves configurations. Use compileClasspath or, in your case, runtimeClasspath, this should tell you where the dependency comes from. And if you can’t figure it out again, use a build scan which will list all dependendencies from all configurations.

Then look at the docs, they explain what you can do in such situations.