不支持 class 文件主要版本 58 on Play Java 使用 Ebean 时的入门示例

Unsupported class file major version 58 on Play Java Starter Example when using Ebean

我正在测试 Play,正在使用 Oracle Java 1.8。当我下载 Play Java Starter 示例并使用单个模型启用 Ebean 时,我得到:

Unsupported class file major version 58

错误。在我的 plugins.sbt 上,我有:

addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.8.1")
addSbtPlugin("com.typesafe.sbt" % "sbt-play-ebean" % "6.0.0")

并且正在使用 Play 中的所有默认设置。这曾经工作过,但最近它不起作用。我相信“guice”或“Ebean 的注入”或依赖项已使用 Java14 编译。另外,当我在 JavaOptions 中放置以下内容时:

    javacOptions ++= Seq(
      "-source", "1.8", "-target", "1.8",
      ...

编译器中断说有使用 Java 编译的代码 14. 还有其他人遇到这个问题吗?到目前为止,我已经尝试了 Play Framework、Ebean、Scala 和其他版本的不同排列。我相信如果你清除你的 sbt 和 gradle 缓存你会得到同样的错误。

格式化我的硬盘后以为我疯了,事实证明最新版本的 SBT 使用 OpenJDK 14(或最新版本)进行编译或注入。我相信是这种情况,因为 Oracle JKD 在 public 面向存储库中不再可用,但需要创建一个 Oracle 帐户才能下载他们的 JDK.

最佳解决方案是在您的终端上设置 $JAVA_HOME(即:将其添加到 .bashrc)以强制 SBT 使用您的首选 JDK。任何其他方式都会导致 SBT 使用最新的 OpenJDK 版本。