io.netty.util.AttributeKey.valueOf()的NoSuchMethodError

时间:2017-02-01 13:12:35

标签: scala apache-spark netty grpc

我在使用sbt-assembly打包的Spark 2.1 / grpc 1.0.1应用程序中遇到了NoSuchMethodError(similar to this question)的问题。使用

启动gRPC服务器时
NettyServerBuilder.forPort(port)
  .addService(...)
  .build.start

我得到以下异常:

Exception in thread "Thread-21" java.lang.NoSuchMethodError: io.netty.util.AttributeKey.valueOf(Ljava/lang/Class;Ljava/lang/String;)Lio/netty/util/AttributeKey;
at io.grpc.netty.Utils.<clinit>(Utils.java:85)
at io.grpc.netty.NettyServer.allocateSharedGroups(NettyServer.java:187)
at io.grpc.netty.NettyServer.start(NettyServer.java:116)
at io.grpc.internal.ServerImpl.start(ServerImpl.java:147)
...

我使用了sbt show updatesbt evicted来尝试查找错误的来源。因此,我现在使用

排除io.netty
.map(_.excludeAll(ExclusionRule("io.netty")))

然后包括

Seq(
  "io.netty" % "netty-buffer" % "4.1.6.Final",
  "io.netty" % "netty-codec" % "4.1.6.Final",
  "io.netty" % "netty-codec-http" % "4.1.6.Final",
  "io.netty" % "netty-codec-http2" % "4.1.6.Final",
  "io.netty" % "netty-codec-socks" % "4.1.6.Final",
  "io.netty" % "netty-common" % "4.1.6.Final",
  "io.netty" % "netty-handler" % "4.1.6.Final",
  "io.netty" % "netty-handler-proxy" % "4.1.6.Final",
  "io.netty" % "netty-resolver" % "4.1.6.Final",
  "io.netty" % "netty-transport" % "4.1.6.Final"
)

不幸的是,这没有用。我还解压缩了我提交给jar的jar并查看了那里的类并使用java -p AttributeKey我得到了(在文件夹./io/netty/util中有两个文件AttributeKey.class和AttributeKey $ 1.class,但是这不会导致问题,对吗?)

Warning: Binary file AttributeKey contains io.netty.util.AttributeKey
Compiled from "AttributeKey.java"
...
  public static <T> io.netty.util.AttributeKey<T> valueOf(java.lang.String);
...

所以方法就在那里,但老实说我不明白是什么引发了这个错误。您有什么建议如何进一步在这里进行?

更新:我想问题是提交Spark应用程序将使用Spark附带的库。因此,我尝试包含netty 4.1.6不会改变任何内容,因为它将被Spark默认netty覆盖。您可以使用spark.driver.userClassPathFirst,但它被认为是实验性的。

更新2 :我在io.netty.**com.google.**使用了阴影(使用sbt-assembly)(显然有些guava版本也存在冲突......)现在它有效。

0 个答案:

没有答案