使用 JDK 1.7 运行播放应用程序时出现 UnsupportedClassVersionError

Posted

技术标签:

【中文标题】使用 JDK 1.7 运行播放应用程序时出现 UnsupportedClassVersionError【英文标题】:UnsupportedClassVersionError on running play application with JDK 1.7 【发布时间】:2015-09-13 04:19:00 【问题描述】:

刚刚开始为我的项目需求学习 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

【问题讨论】:

打开E:\workspace\play\first-app\project\plugins.sbtaddSbtPlugin("com.typesafe.play" % "sbt-plugin" % "X.Y.Z") 行中的数字 X.Y.Z 是多少? 它是 2.4.1。现在我将其更改为 2.3.9 并且它正在工作 有人可以创建一个详细说明明确步骤的答案吗?也就是说,进入app/project/plugins.sbt 并将com.typesafe.play 版本替换为2.3.9。官方的回答让我觉得我的 JDK 设置有问题,但似乎更改(自动生成的)plugins.sbt 是适当的修复。 使用 openjdk8 在 shippable.com 构建系统上构建 play 2.4.x 时出现相同错误。切换到 oraclejdk8 构建标签解决了这个问题。 您好 Pokuri 我也面临同样的问题,之前是 2.5.9,我已将其更改为 2.3.9,但仍然面临同样的问题。请帮我做什么? 【参考方案1】:

@cib 所说的确实解决了我的问题。 只需修改我的 projet 目录中的文件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,但我仍然面临同样的问题,请帮助我【参考方案2】:

遇到类似问题,换版本解决

//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,但我仍然面临同样的问题,请帮助我,提前致谢【参考方案3】:

发生ConfigException是因为从1.3.0版本开始,com.typesafe.config库只兼容JDK8;见README。您需要降级库版本。使用

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

【讨论】:

【参考方案4】:

说明:

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

Java 8 的主版本为 52,这意味着如果我们从 Java 8 安装运行 javac 命令,它将默认生成一个主版本为 52 的类。但是,如果我们在 JRE 7 中运行类文件,我们将得到“不支持major.minor 版本 52.0"。

解决方案:

%JAVA_HOME% 中存在错误配置

java -versionjava版本“1.8.0_45”

javac -versionjavac 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

【讨论】:

感谢您的描述和解决方案风格的答案:)【参考方案5】:

虽然看起来我在 java 和 javac 上使用了相同的版本:

java -versionjava版本“1.8.0_51” javac -versionjavac 1.8.0_51

我的问题是(Linux Mint 17.1)我安装了 oracle-java7oracle-java8 所以某处肯定有错误配置。

我卸载了oracle-java7,一切正常。

【讨论】:

我在 Ubuntu 14.04 上遇到了同样的问题 我在路径中有相同版本的 java,但我的 JAVA_HOME 变量设置为以前的版本。将 JAVA_HOME 设置为正确的版本即可解决问题。【参考方案6】:

52 = Java 8, 51 = Java 7.. 在com.typesafe.config.ConfigException;所以你的图书馆太新了。

【讨论】:

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

以上是关于使用 JDK 1.7 运行播放应用程序时出现 UnsupportedClassVersionError的主要内容,如果未能解决你的问题,请参考以下文章

在 Heroku 上部署时出现 Django 1.7 迁移错误

部署播放框架 1.2.5 应用程序时出现 LinkageError

使用 gradle 编译时出现 Invalid source release 1.7 错误

解决Windows对JDK默认版本切换问题

在AD9中,编译原理图时出现un designated part 错误怎么改正呢

将 Facebook 插件与 Unity 一起使用时出现 ActivityNotFoundException