使用 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.sbt
。 addSbtPlugin("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 = 50Java 8 的主版本为 52,这意味着如果我们从 Java 8 安装运行 javac 命令,它将默认生成一个主版本为 52 的类。但是,如果我们在 JRE 7 中运行类文件,我们将得到“不支持major.minor 版本 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
【讨论】:
感谢您的描述和解决方案风格的答案:)【参考方案5】:虽然看起来我在 java 和 javac 上使用了相同的版本:
java -version
java版本“1.8.0_51”
javac -version
javac 1.8.0_51
我的问题是(Linux Mint 17.1)我安装了 oracle-java7
和 oracle-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 错误