简体   繁体   中英

Gradle will pass in CLI and not Intellij (Instance method doesn't exist)

I run tests on CI and local and they pass with gradle test . When I run via Intellij or try to debug, they fail and I get a failure on this call:

LogicalType type = schema.getLogicalType(); This is actually an external function call in one of our dependencies.

java.lang.NoSuchMethodError: 'org.apache.avro.LogicalType org.apache.avro.Schema.getLogicalType()'

I'm not sure how to get around this, is this conflicting jars on the classpath?

Dependency graph on Avro

❯ gradle dependencies | grep -i avro
|    |    |    |    +--- org.apache.avro:avro:1.7.7 -> 1.9.1
|    |    |    |    |    |    |    +--- org.apache.avro:avro:1.7.7 -> 1.9.1 (*)
|    |    |    |    |    |    +--- org.apache.avro:avro:1.7.7 -> 1.9.1 (*)
|    |    |    +--- org.apache.avro:avro:1.7.7 -> 1.9.1 (*)
|    \--- org.apache.avro:avro:1.9.1 (*)
|    +--- org.apache.avro:avro:1.9.1 (*)
|    \--- org.apache.avro:avro:1.9.0 -> 1.9.1 (*)
+--- io.confluent:kafka-avro-serializer:5.3.1
|    +--- org.apache.avro:avro:1.8.1 -> 1.9.1 (*)
|    |    +--- org.apache.avro:avro:1.8.1 -> 1.9.1 (*)
+--- io.confluent:kafka-streams-avro-serde:5.3.1
|    +--- io.confluent:kafka-avro-serializer:5.3.1 (*)
|    +--- org.apache.avro:avro:1.8.1 -> 1.9.1 (*)
     \--- org.apache.avro:avro:1.9.1 (*)
+--- io.confluent:kafka-avro-serializer:5.3.1 (n)
+--- io.confluent:kafka-streams-avro-serde:5.3.1 (n)
|    |    |    |    |    |    |    |    +--- org.apache.avro:avro:1.7.7 -> 1.9.1
|    |    |    |    |    |    |    +--- org.apache.avro:avro:1.7.7 -> 1.9.1 (*)
|    |    |    |    |    |    +--- org.apache.avro:avro:1.7.7 -> 1.9.1 (*)
|    |    |    +--- org.apache.avro:avro:1.7.7 -> 1.9.1 (*)
|    |    +--- org.apache.avro:avro:1.9.1 (*)
|    +--- io.confluent:kafka-avro-serializer:5.3.1
|    |    +--- org.apache.avro:avro:1.8.1 -> 1.9.1 (*)
|    |    |    +--- org.apache.avro:avro:1.8.1 -> 1.9.1 (*)
|    |    +--- org.apache.avro:avro:1.9.0 -> 1.9.1 (*)
|    |    |    +--- org.apache.avro:avro:1.9.0 -> 1.9.1 (*)
|    |    |         \--- org.apache.avro:avro:1.9.1 (*)
|    +--- io.confluent:kafka-streams-avro-serde:5.3.1
|    |    +--- io.confluent:kafka-avro-serializer:5.3.1 (*)
|    |    +--- org.apache.avro:avro:1.8.1 -> 1.9.1 (*)
|    +--- org.apache.avro:avro:1.9.1 (*)
|    +--- io.confluent:kafka-avro-serializer:5.3.2 -> 5.3.1 (*)
+--- io.confluent:kafka-avro-serializer:5.3.1 (*)
+--- io.confluent:kafka-streams-avro-serde:5.3.1 (*)
|    |    |    |    +--- org.apache.avro:avro:1.7.7 -> 1.9.1
|    |    |    |    |    |    |    +--- org.apache.avro:avro:1.7.7 -> 1.9.1 (*)
|    |    |    |    |    |    +--- org.apache.avro:avro:1.7.7 -> 1.9.1 (*)
|    |    |    +--- org.apache.avro:avro:1.7.7 -> 1.9.1 (*)
|    \--- org.apache.avro:avro:1.9.1 (*)
|    +--- org.apache.avro:avro:1.9.1 (*)
|    \--- org.apache.avro:avro:1.9.0 -> 1.9.1 (*)
+--- io.confluent:kafka-avro-serializer:5.3.1
|    +--- org.apache.avro:avro:1.8.1 -> 1.9.1 (*)
|    |    +--- org.apache.avro:avro:1.8.1 -> 1.9.1 (*)
+--- io.confluent:kafka-streams-avro-serde:5.3.1
|    +--- io.confluent:kafka-avro-serializer:5.3.1 (*)
|    +--- org.apache.avro:avro:1.8.1 -> 1.9.1 (*)
|    \--- org.apache.avro:avro:1.9.1 (*)
|    |    |    |    |    |    |    |    +--- org.apache.avro:avro:1.7.7 -> 1.9.1
|    |    |    |    |    |    |    +--- org.apache.avro:avro:1.7.7 -> 1.9.1 (*)
|    |    |    |    |    |    +--- org.apache.avro:avro:1.7.7 -> 1.9.1 (*)
|    |    |    +--- org.apache.avro:avro:1.7.7 -> 1.9.1 (*)
|    |    +--- org.apache.avro:avro:1.9.1 (*)
|    +--- io.confluent:kafka-avro-serializer:5.3.1
|    |    +--- org.apache.avro:avro:1.8.1 -> 1.9.1 (*)
|    |    |    +--- org.apache.avro:avro:1.8.1 -> 1.9.1 (*)
|    |    +--- org.apache.avro:avro:1.9.0 -> 1.9.1 (*)
|    |    |    +--- org.apache.avro:avro:1.9.0 -> 1.9.1 (*)
|    |    |         \--- org.apache.avro:avro:1.9.1 (*)
|    +--- io.confluent:kafka-streams-avro-serde:5.3.1
|    |    +--- io.confluent:kafka-avro-serializer:5.3.1 (*)
|    |    +--- org.apache.avro:avro:1.8.1 -> 1.9.1 (*)
|    +--- org.apache.avro:avro:1.9.1 (*)
|    +--- io.confluent:kafka-avro-serializer:5.3.2 -> 5.3.1 (*)
+--- io.confluent:kafka-avro-serializer:5.3.1 (*)
+--- io.confluent:kafka-streams-avro-serde:5.3.1 (*)

It look like you have two different versions of Avro on classpath. Try to list dependencies with Gradle (see documentation ) - you may see the problem there.

Edit:

It seems your app is indirectly dependent on Avro 1.7.7, 1.8.1, 1.9.0 and 1.9.1.

You should use dependency constraints to make sure your're using only one version.

See here for details.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM