LoginSignup
1

More than 5 years have passed since last update.

play framework (< v2.6)で aws sdk for java を利用しているとrunで実行エラー

Last updated at Posted at 2018-03-18

古いplay framework (v2.5.x)を使っていて、久しぶりにactivator clean runしたらで下記のExceptionが発生して2日ほどハマってしまったので、メモ。

NullPointerException
java.lang.NullPointerException
    at io.netty.channel.group.DefaultChannelGroup.add(DefaultChannelGroup.java:146)
    at play.core.server.NettyServer.bind(NettyServer.scala:140)
    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:483)
    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)
[trace] Stack trace suppressed: run last application/compile:run for the full output.
[error] (application/compile:run) java.lang.reflect.InvocationTargetException
[error] Total time: 4 s, completed 2018/03/18 12:27:47

原因

  • AWS SDK for Java(プロジェクトで利用している)の v1.11.238 で依存ライブラリに下記Nettyが追加されて、play framework (v2.5.x)でデフォルトで利用しているNetty Server と競合したため。
pom.xml
      <!-- Netty is used by Kinesis Video -->
      <netty.version>4.1.17.Final</netty.version>

参考:https://github.com/aws/aws-sdk-java/blame/master/pom.xml#L207

解決方法

  • build.sbtのAWS SDK for JavaのところからNettyを除外。
build.sbt
// 変更前
libraryDependencies += "com.amazonaws" % "aws-java-sdk" % "1.11.+"
build.sbt
// 変更後
libraryDependencies += "com.amazonaws" % "aws-java-sdk" % "1.11.+" excludeAll(ExclusionRule(organization ="io.netty"))

※ AWS SDK内のKinesis Video でNetty v4.1.17.Final を利用していると思うが、わたしのプロジェクトではKinesis Videoは使っていないため、上記のように除外しました。

sbtのplugin dependencyTree で1つ1つ関連ありそうなものを見て、なんとかわかった感じでした。play framework 初心者だからなのかもしれないが。
もう、ActivatorもEOLだし、playのバージョンも古いからアップデートしないと...

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1