首页 > 解决方案 > jdk11 scala 2.12.8 兼容性

问题描述

我的 scala 2.12.8 项目在 jdk8 上运行良好,在解决了一些编译问题后,我设法用 jdk11 构建了 scala 2.12.8 项目。但是我得到了一个运行时类加载异常,如下所示

Exception in thread "main" java.lang.NoClassDefFoundError: play/api/http/JavaHttpFiltersDelegate$AjcClosure1
    at java.base/java.lang.Class.getDeclaredConstructors0(Native Method)
    at java.base/java.lang.Class.privateGetDeclaredConstructors(Unknown Source)
    at java.base/java.lang.Class.getDeclaredConstructors(Unknown Source)
    at com.google.inject.spi.InjectionPoint.forConstructorOf(InjectionPoint.java:245)
    at com.google.inject.internal.ConstructorBindingImpl.create(ConstructorBindingImpl.java:115)
    at com.google.inject.internal.InjectorImpl.createUninitializedBinding(InjectorImpl.java:706)
    at com.google.inject.internal.UntargettedBindingProcessor$1.visit(UntargettedBindingProcessor.java:54)
    at com.google.inject.internal.UntargettedBindingProcessor$1.visit(UntargettedBindingProcessor.java:36)
    at com.google.inject.internal.UntargettedBindingImpl.acceptTargetVisitor(UntargettedBindingImpl.java:49)
    at com.google.inject.internal.UntargettedBindingProcessor.visit(UntargettedBindingProcessor.java:35)
    at com.google.inject.internal.UntargettedBindingProcessor.visit(UntargettedBindingProcessor.java:27)
    at com.google.inject.internal.BindingImpl.acceptVisitor(BindingImpl.java:99)
    at com.google.inject.internal.AbstractProcessor.process(AbstractProcessor.java:54)
    at com.google.inject.internal.InjectorShell$Builder.build(InjectorShell.java:186)
    at com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:103)
    at com.google.inject.Guice.createInjector(Guice.java:87)
    at com.google.inject.Guice.createInjector(Guice.java:78)
    at play.api.inject.guice.GuiceBuilder.injector(GuiceInjectorBuilder.scala:185)
    at play.api.inject.guice.GuiceApplicationBuilder.build(GuiceApplicationBuilder.scala:137)
    at play.api.inject.guice.GuiceApplicationLoader.load(GuiceApplicationLoader.scala:21)
    at play.core.server.ProdServerStart$.start(ProdServerStart.scala:51)
    at play.core.server.ProdServerStart$.main(ProdServerStart.scala:25)
    at play.core.server.ProdServerStart.main(ProdServerStart.scala)
Caused by: java.lang.ClassNotFoundException: play.api.http.JavaHttpFiltersDelegate$AjcClosure1
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(Unknown Source)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(Unknown Source)
    at java.base/java.lang.ClassLoader.loadClass(Unknown Source)
    ... 23 more

根据 scala 网站https://docs.scala-lang.org/overviews/jdk-compatibility/overview.html

从 Scala 2.13.0、2.12.8 和 2.11.12 开始,JDK 11 支持不完整。值得注意的是,scalac 不会强制执行 Java 平台模块系统的限制,这意味着类型检查的代码可能会在运行时引发链接错误。

我不确定我得到的错误是否与 scala 网站提到的问题有关。如果不知道可能是什么原因?

标签: javascalaplayframeworkguicejava-11

解决方案


推荐阅读