首页 > 解决方案 > 斯卡拉。实例化 trait 时出现 NoSuchMethodException

问题描述

在重构了一些项目之后,当调用一个实现 Spring Boot 应用程序特征的 scala 类时,II 得到了以下异常

22 年 8 月 6 日 13:32:26 错误 SpringApplication:应用程序启动失败 org.springframework.beans.factory.BeanCreationException:在 URL [jar:file:/home/xxxx/environment/spark 中定义名称为“MLController”的 bean 创建错误-2.2.1-bin-hadoop2.7/./xxxx/ikodaanalysis-mlserver-0.1.0.jar!/xxx/mlserver/MLController.class]:实例化bean失败;嵌套异常是 org.springframework.beans.BeanInstantiationException:无法实例化 [xxx.mlserver.MLController]:构造函数抛出异常;嵌套异常是 java.lang.NoSuchMethodError: ikoda.utilobjects.SparkConfProviderWithStreaming.$init$(Lxxx/utilobjects/SparkConfProviderWithStreaming;)V

我检查了依赖项,一切似乎都存在于 jar 中。那么为什么我会得到例外?

标签: scala

解决方案


我在这里找到了答案。我觉得这可能是一个相当普遍的问题,值得报告 SO。

我认为这是 Java 8 和 Scala 2.12 期望在 ScalaDsl.class 文件(新样式 Traits 作为接口)而不是在 ScalaDsl$class.class 文件(旧样式 Traits 作为接口和支持类)中找到“init”方法.

......我认为Scala 2.12包需要在Java 8下编译(不仅仅是运行)以避免这个问题。


推荐阅读