Gradle会在命令行界面中传递,而不是在Intellij中(实例方法不存在)。

huangapple 未分类评论59阅读模式
英文:

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

问题

以下是你要翻译的内容:

我在CI和本地上运行测试,并且它们通过了 gradle test。但当我通过Intellij运行或尝试进行调试时,测试失败了,我在这个调用上得到了一个错误:

LogicalType type = schema.getLogicalType(); 实际上,这是我们依赖项中的一个外部函数调用。

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

我不确定如何解决这个问题,这是类路径上的冲突jar包吗?

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 (*)
|    |    |    |    |

<details>
<summary>英文:</summary>

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. 

&gt; java.lang.NoSuchMethodError: &#39;org.apache.avro.LogicalType org.apache.avro.Schema.getLogicalType()&#39;


I&#39;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 (
)


</details>


# 答案1
**得分**: 0

看起来你的类路径上有两个不同版本的Avro。尝试使用Gradle列出依赖项(参见[文档][1]),你可能会在那里找到问题。

编辑:

似乎你的应用间接依赖于Avro 1.7.7、1.8.1、1.9.0和1.9.1。

你应该使用依赖约束来确保只使用一个版本。

详细信息请参见[这里][2]。

  [1]: https://docs.gradle.org/current/userguide/userguide_single.html#sec:listing_dependencies
  [2]: https://docs.gradle.org/current/userguide/dependency_constraints.html

<details>
<summary>英文:</summary>

It look like you have two different versions of Avro on classpath. Try to list dependencies with Gradle (see [documentation][1]) - 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&#39;re using only one version.

See [here][2] for details.


  [1]: https://docs.gradle.org/current/userguide/userguide_single.html#sec:listing_dependencies
  [2]: https://docs.gradle.org/current/userguide/dependency_constraints.html

</details>



huangapple
  • 本文由 发表于 2020年7月29日 00:26:46
  • 转载请务必保留本文链接:https://java.coder-hub.com/63138688.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定