从子类型到超类型的 ClassCastException(在 Scala 中)
ClassCastException from subtype to supertype (in scala)
我们只在一台开发机器上始终遇到一个奇怪的错误,对于其他机器它工作正常(我个人无法重现该问题):
Caused by: java.lang.ClassCastException: scala.collection.immutable.$colon$colon cannot be cast to scala.collection.Seq
at scala.Option.map (Option.scala:163)
at com.lightbend.lagom.maven.RunAllMojo.$anonfun$execute (ServiceMojos.scala:402)
Seq
是每个 https://www.scala-lang.org/api/2.12.0/scala/collection/immutable/$colon$colon.html 的 ::
($colon$colon
) 的线性超类型。我们将 Lagom 1.6.0-M2 用于 Java DSL,以及 Scala 2.12。 Java版本:
openjdk version "1.8.0_212"
OpenJDK Runtime Environment Corretto-8.212.04.2 (build 1.8.0_212-b04)
OpenJDK 64-Bit Server VM Corretto-8.212.04.2 (build 25.212-b04, mixed mode)
它发生在 lagom 开发服务器期间 bootstrap。清除并重新下载 maven 存储库(尤其是 scala-lang 和 lagom deps)并没有解决这个问题,所以这可能不是由于文件损坏造成的。
我将我机器上的 Scala 罐子与坏机器上的 Scala 罐子进行了比较,它们是一样的。
什么会导致从子类型到超类型的 ClassCastException,我们应该从哪里开始调查这个问题?
这是一个类加载器问题 。
核心问题是 Maven 插件使用了 <extensions>true</extensions>
配置,这不知何故搞乱了类加载器。
实际问题已解决,删除扩展标志解决了问题:
我们只在一台开发机器上始终遇到一个奇怪的错误,对于其他机器它工作正常(我个人无法重现该问题):
Caused by: java.lang.ClassCastException: scala.collection.immutable.$colon$colon cannot be cast to scala.collection.Seq
at scala.Option.map (Option.scala:163)
at com.lightbend.lagom.maven.RunAllMojo.$anonfun$execute (ServiceMojos.scala:402)
Seq
是每个 https://www.scala-lang.org/api/2.12.0/scala/collection/immutable/$colon$colon.html 的 ::
($colon$colon
) 的线性超类型。我们将 Lagom 1.6.0-M2 用于 Java DSL,以及 Scala 2.12。 Java版本:
openjdk version "1.8.0_212"
OpenJDK Runtime Environment Corretto-8.212.04.2 (build 1.8.0_212-b04)
OpenJDK 64-Bit Server VM Corretto-8.212.04.2 (build 25.212-b04, mixed mode)
它发生在 lagom 开发服务器期间 bootstrap。清除并重新下载 maven 存储库(尤其是 scala-lang 和 lagom deps)并没有解决这个问题,所以这可能不是由于文件损坏造成的。
我将我机器上的 Scala 罐子与坏机器上的 Scala 罐子进行了比较,它们是一样的。
什么会导致从子类型到超类型的 ClassCastException,我们应该从哪里开始调查这个问题?
这是一个类加载器问题
核心问题是 Maven 插件使用了 <extensions>true</extensions>
配置,这不知何故搞乱了类加载器。
实际问题已解决,删除扩展标志解决了问题: