Mac OS X Activator 新播放框架错误

Mac OS X Activator New Play Framework Error

我正在 运行使用 Typesafe 1.3.4 的最新激活器安装最新的 Yosemite 10.10.3,我尝试创建一个新的 Scala 项目模板 6,但我无法再 运行没有这个错误的模板。

[info] Loading project definition from /Users/Master/x/x/project
java.lang.UnsupportedClassVersionError: play/runsupport/classloader/ApplicationClassLoaderProvider : 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.access0(URLClassLoader.java:71)
    at java.net.URLClassLoader.run(URLClassLoader.java:361)
    at java.net.URLClassLoader.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 java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    at play.sbt.run.PlayRun$.<init>(PlayRun.scala:35)
    at play.sbt.run.PlayRun$.<clinit>(PlayRun.scala)
    at play.sbt.PlaySettings$.defaultSettings$lzycompute(PlaySettings.scala:70)
    at play.sbt.PlaySettings$.defaultSettings(PlaySettings.scala:47)
    at play.sbt.Play$.projectSettings(Play.scala:26)
    at sbt.Load$$anonfun$autoPluginSettings.apply(Load.scala:666)
    at sbt.Load$$anonfun$autoPluginSettings.apply(Load.scala:666)
    at scala.collection.TraversableLike$$anonfun$flatMap.apply(TraversableLike.scala:251)
    at scala.collection.TraversableLike$$anonfun$flatMap.apply(TraversableLike.scala:251)
    at scala.collection.immutable.List.foreach(List.scala:318)
    at scala.collection.TraversableLike$class.flatMap(TraversableLike.scala:251)
    at scala.collection.AbstractTraversable.flatMap(Traversable.scala:105)
    at sbt.Load$.autoPluginSettings(Load.scala:666)
    at sbt.Load$.sbt$Load$$expandSettings(Load.scala:681)
    at sbt.Load$$anonfun$sbt$Load$$expandSettings.apply(Load.scala:682)
    at sbt.Load$$anonfun$sbt$Load$$expandSettings.apply(Load.scala:682)
    at scala.collection.IndexedSeqOptimized$class.foldl(IndexedSeqOptimized.scala:51)
    at scala.collection.IndexedSeqOptimized$class.foldLeft(IndexedSeqOptimized.scala:60)
    at scala.collection.mutable.WrappedArray.foldLeft(WrappedArray.scala:34)
    at scala.collection.TraversableOnce$class.$div$colon(TraversableOnce.scala:138)
    at scala.collection.AbstractTraversable.$div$colon(Traversable.scala:105)
    at sbt.Load$.sbt$Load$$expandSettings(Load.scala:682)
    at sbt.Load$.resolveProject(Load.scala:684)
    at sbt.Load$.finalizeProject(Load.scala:549)
    at sbt.Load$.loadTransitive(Load.scala:577)
    at sbt.Load$.loadProjects(Load.scala:442)
    at sbt.Load$.loadUnit(Load.scala:446)
    at sbt.Load$$anonfun$$anonfun$apply.apply(Load.scala:281)
    at sbt.Load$$anonfun$$anonfun$apply.apply(Load.scala:281)
    at sbt.BuildLoader$$anonfun$componentLoader$$anonfun$apply$$anonfun$apply$$anonfun$apply.apply(BuildLoader.scala:91)
    at sbt.BuildLoader$$anonfun$componentLoader$$anonfun$apply$$anonfun$apply$$anonfun$apply.apply(BuildLoader.scala:90)
    at sbt.BuildLoader.apply(BuildLoader.scala:140)
    at sbt.Load$.loadAll(Load.scala:334)
    at sbt.Load$.loadURI(Load.scala:289)
    at sbt.Load$.load(Load.scala:285)
    at sbt.Load$.load(Load.scala:276)
    at sbt.Load$.apply(Load.scala:130)
    at sbt.Load$.defaultLoad(Load.scala:36)
    at sbt.BuiltinCommands$.doLoadProject(Main.scala:481)
    at sbt.BuiltinCommands$$anonfun$loadProjectImpl.apply(Main.scala:475)
    at sbt.BuiltinCommands$$anonfun$loadProjectImpl.apply(Main.scala:475)
    at sbt.Command$$anonfun$applyEffect$$anonfun$apply.apply(Command.scala:58)
    at sbt.Command$$anonfun$applyEffect$$anonfun$apply.apply(Command.scala:58)
    at sbt.Command$$anonfun$applyEffect$$anonfun$apply.apply(Command.scala:60)
    at sbt.Command$$anonfun$applyEffect$$anonfun$apply.apply(Command.scala:60)
    at sbt.Command$.process(Command.scala:92)
    at sbt.MainLoop$$anonfun$$anonfun$apply.apply(MainLoop.scala:98)
    at sbt.MainLoop$$anonfun$$anonfun$apply.apply(MainLoop.scala:98)
    at sbt.State$$anon.process(State.scala:184)
    at sbt.MainLoop$$anonfun.apply(MainLoop.scala:98)
    at sbt.MainLoop$$anonfun.apply(MainLoop.scala:98)
    at sbt.ErrorHandling$.wideConvert(ErrorHandling.scala:17)
    at sbt.MainLoop$.next(MainLoop.scala:98)
    at sbt.MainLoop$.run(MainLoop.scala:91)
    at sbt.MainLoop$$anonfun$runWithNewLog.apply(MainLoop.scala:70)
    at sbt.MainLoop$$anonfun$runWithNewLog.apply(MainLoop.scala:65)
    at sbt.Using.apply(Using.scala:24)
    at sbt.MainLoop$.runWithNewLog(MainLoop.scala:65)
    at sbt.MainLoop$.runAndClearLast(MainLoop.scala:48)
    at sbt.MainLoop$.runLoggedLoop(MainLoop.scala:32)
    at sbt.MainLoop$.runLogged(MainLoop.scala:24)
    at sbt.StandardMain$.runManaged(Main.scala:53)
    at sbt.xMain.run(Main.scala:28)
    at xsbt.boot.Launch$$anonfun$run.apply(Launch.scala:109)
    at xsbt.boot.Launch$.withContextLoader(Launch.scala:128)
    at xsbt.boot.Launch$.run(Launch.scala:109)
    at xsbt.boot.Launch$$anonfun$apply.apply(Launch.scala:35)
    at xsbt.boot.Launch$.launch(Launch.scala:117)
    at xsbt.boot.Launch$.apply(Launch.scala:18)
    at xsbt.boot.Boot$.runImpl(Boot.scala:41)
    at xsbt.boot.Boot$.main(Boot.scala:17)
    at xsbt.boot.Boot.main(Boot.scala)
[error] java.lang.UnsupportedClassVersionError: play/runsupport/classloader/ApplicationClassLoaderProvider : Unsupported major.minor version 52.0

这是堆栈跟踪的相关部分:

java.lang.UnsupportedClassVersionError:      
play/runsupport/classloader/ApplicationClassLoaderProvider : Unsupported  
major.minor version 52.0 at java.lang.ClassLoader.defineClass1(Native Method) at

表示您安装了Java7,但模板不支持。尝试使用带有 Java 8 的模板。

从 2.4.0 版开始的最新 Play 框架需要 Java 1.8。升级解决。

PlayFramework ChangeLog

正如@nkadwa 已经提到的,从 2.4.0 版开始的最新 Play 框架需要 Java 1.8。

值得一提的是,在WindowsOS中,activator命令使用了JAVA_HOME环境变量,如果设置了,要找到Java 要使用的实例。

因此,即使您安装了 Java 8,JAVA_HOME 环境变量也可以指向旧版本的 JDK。这可能是出现该错误的原因之一。

设置 JAVA_HOME 变量指向 JDK 的新版本,或者删除 JAVA_HOME 变量(如果您只想使用 JRE)来解决这个问题。

如果您使用的是 playframework 2.4.2,请确保您已将开发机器设置为使用 java 1.8.0+

这就是您将机器设置为在 ubuntu

上使用 java 1.8 的方式
  1. 设置java版本 sudo update-alternatives --config java

备选方案java有5个选择(提供/usr/bin/java)。

选择路径优先状态

  • 0 /usr/lib/jvm/java-8-oracle/jre/bin/java 20004 自动模式 1 /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java 1071 手动模式 2 /usr/lib/jvm/java-7-oracle/jre/bin/java 20002 手动模式 3 /usr/lib/jvm/java-8-oracle/bin/java 20000 手动模式 4 /usr/lib/jvm/java-8-oracle/jre/bin/java 20004 手动模式 5 /usr/lib/jvm/jre1.7.0_45/bin/java 1 手动模式 按回车键保留当前选择[*],或输入选择编号:

2.Set javac版 sudo update-alternatives --config javac

备选方案java有5个选择(提供/usr/bin/java)。

选择路径优先状态

  • 0 /usr/lib/jvm/java-8-oracle/jre/bin/java 20004 自动模式 1 /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java 1071 手动模式 2 /usr/lib/jvm/java-7-oracle/jre/bin/java 20002 手动模式 3 /usr/lib/jvm/java-8-oracle/bin/java 20000 手动模式 4 /usr/lib/jvm/java-8-oracle/jre/bin/java 20004 手动模式 5 /usr/lib/jvm/jre1.7.0_45/bin/java 1 手动模式 按回车键保留当前选择[*],或输入选择编号:

    1. 将 JAVA_HOME 设置为 java 1.8 源 ( /usr/lib/jvm/java-8-oracle/jre/bin/java )

~/.bashrc 但是对于 Java,我遵循了 https://askubuntu.com/questions/55848/how-do-i-install-oracle-java-jdk-7

中的说明

对我来说已经足够了。

您还可以定义多个 java_home,并且只有其中一个处于活动状态(其余评论)。

假设在你的 bashrc 文件中,你有

导出JAVA_HOME=......jdk1.7

导出JAVA_HOME=......jdk1.8

通知 1.8 已评论。一旦你这样做了

来源 ~/.bashrc

jdk1.7 将在路径中。

您可以通过这种方式轻松切换它们。还有其他更永久的解决方案。我发布的 link 有那个信息。