将Heroku App更新为Java 8

我有一个Play 2.2应用程序,我正在使用Java 8,我无法上class。 代码使用OpenJDK 1.8在本地编译,但是当我尝试将代码推送到Heroku时,我收到以下错误,这是我在本地早些时候出现的错误,当我在LambJas上偶然运行OpenJDK 1.7时。

 java.lang.RuntimeException: Unknown constant: 18 

我将system.properties设置为使用Java 1.8,我知道它正在运行,因为它启动时使用以下文本:

 Play 2.x - Java app detected -----> Installing OpenJDK 1.8...done 

有没有我忘记更新到Java 8的东西?
我尝试更新PATH以及此处指定但没有做任何事情。

Unknown constant: 18最可能是指类文件的常量池中的CONSTANT_InvokeDynamic标记,其值为18 。 这不是JDK问题,因为即使Java 7也能理解该标记。

因此,它是运行时运行的字节代码操作工具的指示器,无法理解较新的类文件(但尝试处理它们,尽管版本号未知)。 这适用于Java 7,因为invokedynamicfunction存在,但不与普通的Java 7类文件一起使用(即由javac )。

既然你知道自己是否使用了字节码操作,它必须是框架的一部分,即你命名为heroku和playframework。 所以你的问题不是更新JDK,而是将框架更新为支持Java-8的版本,如果这些版本已经存在的话。

作为Holger回应的补充,这是Heroku支持所说的:

嗨,

由于OpenJDK的Linux发行版延迟,Java 8仍处于旧版预发行版。 您可以在此处跟踪JDK 8的状态: https : //github.com/heroku/heroku-buildpack-jvm-common/issues/10#issuecomment-38006175