【问题标题】:How can I use Scala with JDK 1.7? (Unsupported major.minor 52.0 Error)如何在 JDK 1.7 中使用 Scala? (不支持的major.minor 52.0 错误)
【发布时间】:2018-04-20 09:05:34
【问题描述】:

这个“不支持的major.minor 52.0 版本”错误让我抓狂。

如何让 scala 使用 jdk 1.7。我的 SBT 项目需要为 1.7,除非我将 java_home 设置为 1.8,否则我无法运行 sbt 或 scala。

我的 google foo 并不强大,因为这个模糊关键字问题的结果太多了。

我需要安装不同版本的 scala 吗? sbt?

谢谢,

编辑更多细节:

 $ java -version
java version "1.7.0_80"
Java(TM) SE Runtime Environment (build 1.7.0_80-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.80-b11, mixed mode)

$ echo $JAVA_HOME
/Library/Java/JavaVirtualMachines/jdk1.7.0_80.jdk/Contents/Home

$ sbt -sbt-version 0.13.16 ~jetty:start
[info] Loading project definition from /Users/dan/Projects/temp/ssltester/project
[info] Set current project to ssltester (in build file:/Users/dan/Projects/temp/ssltester/)
[info] starting server ...
[success] Total time: 0 s, completed Nov 7, 2017 4:35:49 PM
1. Waiting for source changes... (press enter to interrupt)
Exception in thread "main" java.lang.UnsupportedClassVersionError: org/eclipse/jetty/runner/Runner : Unsupported major.minor version 52.0
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:482)

[info] waiting for server to shut down...

build.sbt

name := "ssltester"

version := "1.0"

scalaVersion := "2.11.11"

resolvers += "Sonatype OSS Snapshots" at "https://oss.sonatype.org/content/repositories/snapshots"

libraryDependencies += "org.scala-lang.modules" %% "scala-xml" % "1.0.2"

libraryDependencies += "javax.servlet" % "javax.servlet-api" % "3.0.1" % "provided"

libraryDependencies += "org.codehaus.groovy.modules.http-builder" % "http-builder" % "0.5.2"

enablePlugins(JettyPlugin)

./project/build.sbt

addSbtPlugin("com.earldouglas" % "xsbt-web-plugin" % "3.0.1")

【问题讨论】:

  • “我需要安装不同版本的scala吗?” 你需要运行一个兼容Java 7的scala版本。因为你没有说哪个版本您正在运行的scala,我们如何回答这个问题?
  • 我认为有,我尝试在网上找到一个矩阵(scala 到 jdk 版本)。这不应该是谷歌的第一个结果吗?我想在 jdk 1.7 上运行任何版本的 scala。在这一点上没关系,但我正在运行 1.7 的服务器上测试一个简单的脚本。我需要编写一个简单的 JVM 应用程序在 jdk1.7 上运行,这很痛苦。
  • 如果有人创建了这样的矩阵,它只能是第一个结果。没有人有。特定 Scala 版本的要求列在该 Scala 版本的下载页面上。例如。 Scala 2.11.0“首先,确保您已安装 Java 8 JDK。” 因此,您希望“在 jdk 1.7 上运行任何版本的 scala”显然是不可能。
  • 等一下。甚至 Scala 2.10.6 页面仍然显示下载 JDK 1.8。这么多评论。看起来该页面是一个模板,无论您想要哪个版本的 scala,它仍然显示 jdk 8。即使 JDK 8 在该版本的 scala 发布时不存在。这个答案简直把菜鸟搞糊涂了。
  • 如果其他人偶然发现这个问题:问题不是在运行 SBT 或 Scala(Scala 2.12 和 SBT 1.0 之前的版本可以正常工作)。问题出在 Jetty 插件上。

标签: java scala sbt java-7


【解决方案1】:

Scala 2.12 requires a Java 8 JVM and library。您将不得不使用当前版本的 Java 或过时版本的 Scala。

现在,Traits 使用 default 方法编译为 interfaces,并且 Scala lambda 使用与 Java 8 lambda 相同的编码。 Java 8 lambdas are mostly a library feature and could be backported,但是接口中的方法实现是对字节码语言的向后不兼容的更改。

【讨论】:

  • 我可以使用 SBT 0.13 安装 Scala 2.11 吗?
  • @dlite922 是的。只需在 SBT 构建文件中设置 scalaVersion := "2.11.11"
  • 我有2.11.12,但没有运气。 sbt 仍然因重大的小错误而失败。它想要jdk1.8,我不知道如何告诉它不要使用它。我已将 intelliJ 配置为具有 jdk1.7 并且它显示相同的错误。我运行干净并销毁目标目录,但它被重新创建。我不知道是什么告诉命令行和 intellij 使用 1.8。它是一个简单的 hello world web-app 插件应用程序。没有什么花哨。从此链接创建:earldouglas.com/posts/xwp-template.html
猜你喜欢
  • 1970-01-01
  • 2015-08-25
  • 1970-01-01
  • 1970-01-01
  • 2016-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-28
相关资源
最近更新 更多