在使用JDK 1.7运行Play应用程序时出现UnsupportedClassVersionError错误

35

我刚开始学习Play框架,因为我的项目只基于JDK 1.7,所以我下载了Play 2.3.9版本,并通过键入activator new创建了一个示例项目。然后进入示例项目目录并执行activator run。但是我看到了JDK不兼容的异常。我该在哪里进行更改以处理此问题?

日志:

[info] Loading project definition from E:\workspace\play\first-app\project
[info] Set current project to first-app (in build file:/E:/workspace/play/first-app/)
java.lang.UnsupportedClassVersionError: com/typesafe/config/ConfigException : 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 java.lang.ClassLoader.loadClass(ClassLoader.java:358)
        at com.typesafe.sbt.web.SbtWeb$$anonfun$com$typesafe$sbt$web$SbtWeb$$load$1.apply(SbtWeb.scala:535)
        at com.typesafe.sbt.web.SbtWeb$$anonfun$com$typesafe$sbt$web$SbtWeb$$load$1.apply(SbtWeb.scala:535)
        at scala.Option.fold(Option.scala:157)
        at com.typesafe.sbt.web.SbtWeb$.com$typesafe$sbt$web$SbtWeb$$load(SbtWeb.scala:549)
        at com.typesafe.sbt.web.SbtWeb$$anonfun$globalSettings$1$$anonfun$apply$1.apply(SbtWeb.scala:143)
        at com.typesafe.sbt.web.SbtWeb$$anonfun$globalSettings$1$$anonfun$apply$1.apply(SbtWeb.scala:143)
        at scala.Function1$$anonfun$andThen$1.apply(Function1.scala:55)
        at sbt.Project$.setProject(Project.scala:319)
        at sbt.BuiltinCommands$.doLoadProject(Main.scala:484)
        at sbt.BuiltinCommands$$anonfun$loadProjectImpl$2.apply(Main.scala:475)
        at sbt.BuiltinCommands$$anonfun$loadProjectImpl$2.apply(Main.scala:475)
        at sbt.Command$$anonfun$applyEffect$1$$anonfun$apply$2.apply(Command.scala:58)
        at sbt.Command$$anonfun$applyEffect$1$$anonfun$apply$2.apply(Command.scala:58)
        at sbt.Command$$anonfun$applyEffect$2$$anonfun$apply$3.apply(Command.scala:60)
        at sbt.Command$$anonfun$applyEffect$2$$anonfun$apply$3.apply(Command.scala:60)
        at sbt.Command$.process(Command.scala:92)
        at sbt.MainLoop$$anonfun$1$$anonfun$apply$1.apply(MainLoop.scala:98)
        at sbt.MainLoop$$anonfun$1$$anonfun$apply$1.apply(MainLoop.scala:98)
        at sbt.State$$anon$1.process(State.scala:184)
        at sbt.MainLoop$$anonfun$1.apply(MainLoop.scala:98)
        at sbt.MainLoop$$anonfun$1.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$1.apply(MainLoop.scala:70)
        at sbt.MainLoop$$anonfun$runWithNewLog$1.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$1.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$1.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: com/typesafe/config/ConfigException : Unsupported major.minor version 52.0

3
打开 E:\workspace\play\first-app\project\plugins.sbt 文件。在这一行中 addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "X.Y.Z") 中的数字 X.Y.Z 是什么?请翻译。 - Salem
3
现在版本号是2.4.1,我将其更改为2.3.9,现在它可以正常运行。 - Pokuri
1
有人可以创建一个详细的答案,列出明确的步骤吗?也就是说,进入 app/project/plugins.sbt 并将 com.typesafe.play 版本替换为 2.3.9。官方答案让我觉得我的 JDK 设置有问题,但似乎更改(自动生成的)plugins.sbt 是适当的解决方法。 - cib
在shippable.com构建系统上使用openjdk8构建play 2.4.x时出现相同的错误。切换到oraclejdk8构建标签解决了问题。 - Adam Lane
嗨,Pokuri,我也遇到了同样的问题,之前是2.5.9版本,我已经更改为2.3.9版本,但仍然面临同样的问题。请帮助我该怎么办? - Ram Koti
6个回答

35

我看到2.4.x需要Java 8,所以我从这个链接https://playframework.com/download#older-versions下载了2.3.9。那么我如何获取与Java 8兼容的文件呢? - Pokuri
你之前有安装过吗?检查一下你的war包,看看是否误拿了一些jar包。也许是一个版本太新的序列化“confif”对象(*.ser或其他)。 - Joop Eggen
我有同样的问题。我在Play 2.3.9中有另一个项目,我希望这个项目是2.4.1版本。 - Pavel Kudinov
2
请问您能否澄清解决方案? - SaKou
@SaKou,运行在Java 6上的应用程序正在使用为Java 8编译的类。解决方案是搜索旧版本库(如果该类在库中),重新编译为旧版本Java(如果是您自己的类),或者使用更新的Java运行应用程序。 - Joop Eggen

14

描述:

  • Java SE 8 = 52
  • Java SE 7 = 51
  • Java SE 6.0 = 50

Java 8的主要版本号为52,这意味着如果我们从Java 8安装中运行javac命令,它将默认生成一个主要版本为52的类。 但是,如果我们在JRE 7中运行class文件,我们将收到“Unsupported major.minor version 52.0”的错误消息。

解决方法:

%JAVA_HOME% 中的配置有误。

  • java -version java版本号为"1.8.0_45"

  • javac -version javac版本号为1.8.0_45

  • @echo %JAVA_HOME% C:\Program Files\Java\jdk1.7.0_75

临时设置路径如下:

  • set JAVA_HOME=C:\Program Files\Java\jdk1.8.0_45

  • @echo %JAVA_HOME% C:\Program Files\Java\jdk1.8.0_45


感谢您提供的描述和解决方案式答案 :) - fermat4214

2

ConfigException出现的原因是从1.3.0版本开始,com.typesafe.config库只兼容JDK8;请参见README。您需要降低库的版本。使用:

"com.typesafe" % "config" % "1.2.1"

1
尽管我使用的是相同版本的java和javac:
java -version java version "1.8.0_51" javac -version javac 1.8.0_51
我的问题是(Linux Mint 17.1),我安装了oracle-java7和oracle-java8,所以某处必须存在配置错误。
我卸载了oracle-java7,一切正常。

我在Ubuntu 14.04上也遇到了同样的问题。 - lennykey
1
我在路径中使用了相同版本的Java,但我的JAVA_HOME变量被设置为先前的版本。将JAVA_HOME设置为正确的版本解决了问题。 - Decly

1

遇到类似问题,通过更改版本解决

//addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.5.0")
addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.3.9")

通过以上更改,下面的异常得到了解决(注意:系统使用的是Java 7)。

在更高版本中出现的异常:

[info] Set current project to helloworld (in build file:/Users/suniltonger/Projects/play/helloworld/helloworld/)
java.lang.UnsupportedClassVersionError: com/typesafe/config/ConfigException : 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 java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    at com.typesafe.sbt.web.SbtWeb$$anonfun$com$typesafe$sbt$web$SbtWeb$$load$1.apply(SbtWeb.scala:559)
    at com.typesafe.sbt.web.SbtWeb$$anonfun$com$typesafe$sbt$web$SbtWeb$$load$1.apply(SbtWeb.scala:559)
    at scala.Option.fold(Option.scala:157)
    at com.typesafe.sbt.web.SbtWeb$.com$typesafe$sbt$web$SbtWeb$$load(SbtWeb.scala:573)
    at com.typesafe.sbt.web.SbtWeb$$anonfun$globalSettings$1$$anonfun$apply$1.apply(SbtWeb.scala:143)
    at com.typesafe.sbt.web.SbtWeb$$anonfun$globalSettings$1$$anonfun$apply$1.apply(SbtWeb.scala:143)
    at scala.Function1$$anonfun$andThen$1.apply(Function1.scala:55)
    at sbt.Project$.setProject(Project.scala:319)
    at sbt.BuiltinCommands$.doLoadProject(Main.scala:503)
    at sbt.BuiltinCommands$$anonfun$loadProjectImpl$2.apply(Main.scala:484)
    at sbt.BuiltinCommands$$anonfun$loadProjectImpl$2.apply(Main.scala:484)
    at sbt.Command$$anonfun$applyEffect$1$$anonfun$apply$2.apply(Command.scala:59)
    at sbt.Command$$anonfun$applyEffect$1$$anonfun$apply$2.apply(Command.scala:59)
    at sbt.Command$$anonfun$applyEffect$2$$anonfun$apply$3.apply(Command.scala:61)
    at sbt.Command$$anonfun$applyEffect$2$$anonfun$apply$3.apply(Command.scala:61)
    at sbt.Command$.process(Command.scala:93)
    at sbt.MainLoop$$anonfun$1$$anonfun$apply$1.apply(MainLoop.scala:96)
    at sbt.MainLoop$$anonfun$1$$anonfun$apply$1.apply(MainLoop.scala:96)
    at sbt.State$$anon$1.process(State.scala:184)
    at sbt.MainLoop$$anonfun$1.apply(MainLoop.scala:96)
    at sbt.MainLoop$$anonfun$1.apply(MainLoop.scala:96)
    at sbt.ErrorHandling$.wideConvert(ErrorHandling.scala:17)
    at sbt.MainLoop$.next(MainLoop.scala:96)
    at sbt.MainLoop$.run(MainLoop.scala:89)
    at sbt.MainLoop$$anonfun$runWithNewLog$1.apply(MainLoop.scala:68)
    at sbt.MainLoop$$anonfun$runWithNewLog$1.apply(MainLoop.scala:63)
    at sbt.Using.apply(Using.scala:24)
    at sbt.MainLoop$.runWithNewLog(MainLoop.scala:63)
    at sbt.MainLoop$.runAndClearLast(MainLoop.scala:46)
    at sbt.MainLoop$.runLoggedLoop(MainLoop.scala:30)
    at sbt.MainLoop$.runLogged(MainLoop.scala:22)
    at sbt.StandardMain$.runManaged(Main.scala:54)
    at sbt.xMain.run(Main.scala:29)
    at xsbt.boot.Launch$$anonfun$run$1.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$1.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: com/typesafe/config/ConfigException : Unsupported major.minor version 52.0
[error] Use 'last' for the full log.
[debug] > load-failed

嗨,Sunil,我已将sbt-plugin从2.5.9更改为2.3.9,但仍然遇到相同的问题,请帮我,提前感谢。 - Ram Koti

0

确实@cib所说的解决了我的问题。 只需要修改项目目录下的plugins.sbt文件。

将以下行进行修改:

addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.4.2")

改为:

addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.3.9")

然后您再次执行activator run就不会出现任何错误了。


嗨,Amelie,我已将sbt-plugin从2.5.9更改为2.3.9,但仍然遇到相同的问题,请帮助我。 - Ram Koti

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接