playframework-2.0 - 将Google云客户端库添加到Play 2.5时获取ChannelException

标签 playframework-2.0 google-cloud-platform

这是一些堆栈跟踪

io.netty.channel.ChannelException: Unable to create Channel from class class io.netty.channel.socket.nio.NioServerSocketChannel
at io.netty.channel.ReflectiveChannelFactory.newChannel(ReflectiveChannelFactory.java:41)
at io.netty.bootstrap.AbstractBootstrap.initAndRegister(AbstractBootstrap.java:318)
at io.netty.bootstrap.AbstractBootstrap.doBind(AbstractBootstrap.java:282)
at io.netty.bootstrap.AbstractBootstrap.bind(AbstractBootstrap.java:246)
at play.core.server.NettyServer.bind(NettyServer.scala:139)
at play.core.server.NettyServer.play$core$server$NettyServer$$bindChannel(NettyServer.scala:224)
at play.core.server.NettyServer$$anonfun$1.apply(NettyServer.scala:216)
at play.core.server.NettyServer$$anonfun$1.apply(NettyServer.scala:216)
at scala.Option.map(Option.scala:146)
at play.core.server.NettyServer.<init>(NettyServer.scala:216)
at play.core.server.NettyServerProvider.createServer(NettyServer.scala:279)
at play.core.server.NettyServerProvider.createServer(NettyServer.scala:278)
at play.core.server.DevServerStart$$anonfun$mainDev$1.apply(DevServerStart.scala:235)
at play.core.server.DevServerStart$$anonfun$mainDev$1.apply(DevServerStart.scala:65)
at play.utils.Threads$.withContextClassLoader(Threads.scala:21)
at play.core.server.DevServerStart$.mainDev(DevServerStart.scala:64)
at play.core.server.DevServerStart$.mainDevHttpMode(DevServerStart.scala:54)
at play.core.server.DevServerStart.mainDevHttpMode(DevServerStart.scala)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at play.runsupport.Reloader$.startDevMode(Reloader.scala:234)
at play.sbt.run.PlayRun$$anonfun$playRunTask$1$$anonfun$apply$2$$anonfun$apply$3.devModeServer$lzycompute$1(PlayRun.scala:74)
at play.sbt.run.PlayRun$$anonfun$playRunTask$1$$anonfun$apply$2$$anonfun$apply$3.play$sbt$run$PlayRun$$anonfun$$anonfun$$anonfun$$devModeServer$1(PlayRun.scala:74)
at play.sbt.run.PlayRun$$anonfun$playRunTask$1$$anonfun$apply$2$$anonfun$apply$3.apply(PlayRun.scala:100)
at play.sbt.run.PlayRun$$anonfun$playRunTask$1$$anonfun$apply$2$$anonfun$apply$3.apply(PlayRun.scala:53)
at scala.Function1$$anonfun$compose$1.apply(Function1.scala:47)
Caused by: java.lang.NoSuchMethodError: io.netty.channel.DefaultChannelId.newInstance()Lio/netty/channel/DefaultChannelId;

我在build.sbt文件中添加了这样的功能
libraryDependencies += "com.google.cloud" % "google-cloud" % "0.3.0"

仅当我添加Google云库时才会发生这种情况。我不确定这是库还是框架问题

最佳答案

google-cloud使用的netty版本与Play使用的netty版本冲突。这将排除Google-cloud的净值,而支持Play的净值。

libraryDependencies += ("com.google.cloud" % "google-cloud" % "0.3.0").excludeAll(ExclusionRule(organization = "io.netty"))

但是,如果您尝试使用需要gRPC的功能,它将失败。细节:

https://groups.google.com/forum/#!topic/play-framework/UUDZZRpAv3w
https://github.com/playframework/netty-reactive-streams/pull/17

有两种解决方案:

A.将Google-cloud降级到0.2.2,您可以通过将工件重命名为gcloud-java来完成:
"com.google.cloud" % "gcloud-java" % "0.2.2"

B.降级 Play 回2.4.6

关于playframework-2.0 - 将Google云客户端库添加到Play 2.5时获取ChannelException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39436984/

相关文章:

java - 如何在 Controller java play中调用路由?

scala - Play 框架 - 在不启动应用程序的情况下测试数据访问层

Docker 推送到谷歌注册表的速度非常慢

java - 如何避免Google App Engine不支持Runtime.addShutdownHook

java - 如何使用辅助键上的联接建立一对一关系?

mysql - 防止架构更改清除 play Framework 2 项目的数据库

java - 如何禁用 Play 2.6 CSRFFilter

firebase - Cloud Firestore 和 Firebase 实时数据库有什么区别?

google-cloud-platform - 如何验证正在使用 Dataflow Runner v2?

kubernetes - 使用 kustomize 直接从 gcloud secrets manager 中查找 secret 作为 secretGenerator