java - 我相信 Playframework 使用的是 java 7,我得到了不支持的 Major.minor 版本 51.0

标签 java scala playframework

我在 OSX 上使用 playframework 2.2.2。

我的命令行报告我正在使用以下 java 版本:

java version "1.6.0_65"
Java(TM) SE Runtime Environment (build 1.6.0_65-b14-462-11M4609)
Java HotSpot(TM) 64-Bit Server VM (build 20.65-b04-462, mixed mode)

我正在使用 tomcat jdbc 池,当我加载我的 Play 应用程序时,出现此错误:

[RuntimeException: java.lang.UnsupportedClassVersionError: org/apache/tomcat/jdbc/pool/PoolConfiguration : Unsupported major.minor version 51.0]

现在纠正我,如果我错了,但我相信不知何故play使用它自己的java版本,这是java 7正确的吗?我记得在使用 play 时在某个地方看到过这个输出,但我似乎可以弄清楚我在哪里看到了这个。

那么这里的问题是什么,是不是 play 是使用 java 7 编译的,但当我运行它时却使用版本 6?

注意:我不使用 play 命令来运行我的应用程序,而是使用 sbt 输入 b/c 我有几个项目,然后只需输入 run >.

我在 sbt 中的项目布局是:

common
services
web <-- play app

我该如何解决这个问题,因为我有点迷失了正在发生的事情。

最佳答案

Play 2.2 与 Java 6 和 7 兼容。Play 本身不附带 Java,因此您的构建将采用系统上已有的 Java 版本。

这是play命令内部的逻辑。如您所见,play 使用路径中的 Java 版本或 JAVA_HOME 中的版本。

if [ -z "$JAVA_HOME" ]; then
  JAVA="java"
else
  JAVA="$JAVA_HOME/bin/java"
fi

由于 Tomcat 类出现运行时错误,我认为这很可能不是 Play 编译问题。我的猜测是,您使用的 Tomcat 版本需要 Java 7 或更高版本,例如 Tomcat 8。请参阅 Apache Tomcat Versions了解更多信息。

顺便说一句,您可以通过为 Java 编译器提供一些选项来配置 SBT/Play,以确保它始终生成 Java 6 字节码:

javacOptions ++= Seq("-source", "1.6", "-target", "1.6")

参见SBT's Java Sources docs .

关于java - 我相信 Playframework 使用的是 java 7,我得到了不支持的 Major.minor 版本 51.0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23203830/

相关文章:

java - 跨多个操作系统删除一个文件

scala - Spark - 如何在 Spark 中计算百分位数?

java - 如何使用 GridBagLayout 将组件放在右下角?

java - 如何在最终输出 html 中隐藏 wicket 容器和面板标签

java - 当我将 lambda 表达式作为参数传递时,它怎么可能访问此范围内的其他变量?

scala - 为什么Keep.None不影响Akka流执行结果?

java - 在插件中使用 BeanPersistAdapter

java - 在 crud Play 1.2.4 中使用复合键路由到默认编辑模板

scala - 在 Google App Engine 和 Play Framework 上将 HTTP 请求重定向到 HTTPS

java - 适配器类出现问题,没有崩溃,但页面卡住并重新加载