播放2.5.3:Cryptic错误消息:在Netty java.lang.NoClassDefFoundError中捕获异常

时间:2016-05-10 12:18:23

标签: scala playframework playframework-2.5

  

[error] p.c.s.n.PlayRequestHandler - 在Netty中捕获异常         java.lang.NoClassDefFoundError:无法初始化类play.api.http.DefaultHttpErrorHandler $                 在

我收到错误消息,我的应用程序无法以开发模式启动。

错误没有给我任何关于出错的细节。我将logback.xml中的日志级别更改为DEBUG,但它没有帮助。

有关如何调查问题的建议吗?一周前它工作得很好,从那以后,源和配置都没有任何变化。它因为一个未知原因而停止工作。

编辑1:如何启用更详细的日志记录?否则,绝对不清楚错误的来源。

编辑2:更改了标题

 (Server started, use Ctrl+D to stop and go back to the console...)

  Warning: node.js detection failed, sbt will use the Rhino based Trireme JavaScript engine instead to run JavaScript assets compilation, which in some cases may be orders of magnitude slower than using no
  de.js.
  [error] p.c.s.n.PlayRequestHandler - Exception caught in Netty
  java.lang.NoClassDefFoundError: Could not initialize class play.api.http.DefaultHttpErrorHandler$
          at play.core.server.Server$class.logExceptionAndGetResult$1(Server.scala:45)
          at play.core.server.Server$class.getHandlerFor(Server.scala:65)
          at play.core.server.NettyServer.getHandlerFor(NettyServer.scala:47)
          at play.core.server.netty.PlayRequestHandler.handle(PlayRequestHandler.scala:82)
          at play.core.server.netty.PlayRequestHandler.channelRead(PlayRequestHandler.scala:163)
          at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:292)
          at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:278)
          at com.typesafe.netty.http.HttpStreamsHandler.channelRead(HttpStreamsHandler.java:129)
          at com.typesafe.netty.http.HttpStreamsServerHandler.channelRead(HttpStreamsServerHandler.java:96)
          at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:292)
  [error] p.c.s.n.PlayRequestHandler - Exception caught in Netty
  java.lang.NoClassDefFoundError: Could not initialize class play.api.http.DefaultHttpErrorHandler$
          at play.core.server.Server$class.logExceptionAndGetResult$1(Server.scala:45)
          at play.core.server.Server$class.getHandlerFor(Server.scala:65)
          at play.core.server.NettyServer.getHandlerFor(NettyServer.scala:47)
          at play.core.server.netty.PlayRequestHandler.handle(PlayRequestHandler.scala:82)
          at play.core.server.netty.PlayRequestHandler.channelRead(PlayRequestHandler.scala:163)
          at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:292)
          at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:278)
          at com.typesafe.netty.http.HttpStreamsHandler.channelRead(HttpStreamsHandler.java:129)
          at com.typesafe.netty.http.HttpStreamsServerHandler.channelRead(HttpStreamsServerHandler.java:96)
          at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:292)

3 个答案:

答案 0 :(得分:39)

我不确切地知道你的问题是什么,但是当我在application.conf发现错误时我遇到了这个神秘而无益的错误,我试图根据可能的环境变量设置配置可能不在那里。显然,异常的原因和它变得明显的地方差距很大。

因此,我建议您检查application.conf是否配置错误。还要考虑可能为Play版本构建的任何依赖项< 2.5。基本上任何可能导致应用程序由于缺乏更好的术语而“错误投入”的事情。

编辑:我刚发现此错误的另一个原因属于“错误初始化”类别。我在路线文件中更改了路线的名称,但忘记在我的模板中更改相应的反向路线。我觉得应该尽快抓住并且更直观的错误,但无论如何,请在application.confroutes中注意这个(或类似的东西)。

答案 1 :(得分:13)

哎呀.. java.lang.NoClassDefFoundError: Could not initialize class play.api.http.DefaultHttpErrorHandler$没有说明出了什么问题。 我遇到的一个原因就是当我在配置属性中丢失/打字错误并使用guice注入器时。

您可以在产品模式下运行您的应用,以查看更具信息性的错误消息activator clean compile start

  

...

     

[info]完成包装。

     

(启动服务器。输入Ctrl + D退出日志,服务器将保留在后台)

     

糟糕,无法启动服务器。   配置错误:配置错误[storage.conf @ file:/myproject/mymodule/target/universal/stage/conf/storage.conf:16:无法解析替换为值:$ {storage.cluster.name}]       at play.api.Configuration $ .configError(Configuration.scala:154)       ....

答案 2 :(得分:0)

在我的情况下,下面的依赖是造成错误的原因

this.SelectProfile = function(Profile) {
element(by.css('.icon-person-plus')).click();
element.all(by.id("select_profile_button")).filter(function(elm) {
  return elm.element(by.css('.username')).getText().then(function(text) {
   return text === Profile;
   }) 
  }).then(function(filteredElement){
              filteredElement[0].element(by.css('.username')).click();
     });
}

来源Getting ChannelException when adding Google cloud client library to Play 2.5