playframework 2.3.x (java) 升级 javassist

abe*_*bel 2 java playframework

我在编译结束时遇到了这个奇怪的异常

java.lang.ClassCastException: javassist.bytecode.InterfaceMethodrefInfo cannot be cast to javassist.bytecode.MethodrefInfo
    at javassist.bytecode.ConstPool.getMethodrefNameAndType(ConstPool.java:417)
    at javassist.expr.MethodCall.getNameAndType(MethodCall.java:43)
    at javassist.expr.MethodCall.getMethodName(MethodCall.java:107)
    at javassist.expr.ExprEditor.loopBody(ExprEditor.java:217)
    at javassist.expr.ExprEditor.doit(ExprEditor.java:91)
    at javassist.CtBehavior.instrument(CtBehavior.java:712)
    at play.core.enhancers.PropertiesEnhancer.rewriteAccess(PropertiesEnhancer.java:156)
    at play.PlayCommands$$anonfun$PostCompile$1$$anonfun$9.apply(PlayCommands.scala:99)
    at play.PlayCommands$$anonfun$PostCompile$1$$anonfun$9.apply(PlayCommands.scala:99)
    at scala.collection.TraversableLike$$anonfun$filter$1.apply(TraversableLike.scala:264)
    at scala.collection.mutable.ResizableArray$class.foreach(ResizableArray.scala:59)
    at scala.collection.mutable.ArrayBuffer.foreach(ArrayBuffer.scala:47)
    at scala.collection.TraversableLike$class.filter(TraversableLike.scala:263)
    at scala.collection.AbstractTraversable.filter(Traversable.scala:105)
    at play.PlayCommands$$anonfun$PostCompile$1.apply(PlayCommands.scala:99)
    at play.PlayCommands$$anonfun$PostCompile$1.apply(PlayCommands.scala:76)
    at scala.Function8$$anonfun$tupled$1.apply(Function8.scala:35)
    at scala.Function8$$anonfun$tupled$1.apply(Function8.scala:34)
    at scala.Function1$$anonfun$compose$1.apply(Function1.scala:47)
    at sbt.$tilde$greater$$anonfun$$u2219$1.apply(TypeFunctions.scala:42)
    at sbt.std.Transform$$anon$4.work(System.scala:64)
    at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:237)
    at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:237)
    at sbt.ErrorHandling$.wideConvert(ErrorHandling.scala:18)
    at sbt.Execute.work(Execute.scala:244)
    at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:237)
    at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:237)
    at sbt.ConcurrentRestrictions$$anon$4$$anonfun$1.apply(ConcurrentRestrictions.scala:160)
    at sbt.CompletionService$$anon$2.call(CompletionService.scala:30)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Run Code Online (Sandbox Code Playgroud)

谷歌搜索表明该问题可以通过升级 play 使用的 javassist 来解决。谁能解释一下如何在 play 2.3.x 中升级 javassist?或者如何解决这个问题?

谢谢。

LCa*_*ght 5

扩展 Blacklight 的答案,这是由使用 Javaassist 版本 3.18.0-GA 的 sbt-play-enhancer(版本 1.1.0)插件引起的,该插件具有上述接口中 Java 8 默认方法实现的错误

sbt-play-enhancer 已更新为使用 3.20.0-GA,如此处所示但尚未正式发布。

我找到的解决方案是将 Javaassist 的版本覆盖到此拉取请求中看到的更高版本。

在 plugins.sbt 中包含以下行以覆盖 sbt-play-enhancer 指定的 Javaassist 版本

libraryDependencies += "org.javassist" % "javassist" % "3.20.0-GA"
Run Code Online (Sandbox Code Playgroud)