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