【问题标题】:Updating Heroku App to Java 8将 Heroku 应用程序更新到 Java 8
【发布时间】:2014-06-30 14:33:00
【问题描述】:

我有一个使用 Java 8 的 Play 2.2 应用程序,但我无法正常工作。该代码使用 OpenJDK 1.8 为我在本地编译,但是当我尝试将代码推送到 Heroku 时,我收到以下错误,这是我在使用 lambdas 在 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 并指定 here 但这没有做任何事情。

【问题讨论】:

    标签: java heroku playframework java-8


    【解决方案1】:

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

    因此,它表明在您的运行时运行的字节码操作工具不理解较新的类文件(但尽管版本号未知,但仍试图处理它们)。这适用于 Java 7,因为存在 invokedynamic 功能,但不适用于普通 Java 7 类文件(即由 javac 生成)。

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

    【讨论】:

    • 感谢@Holger,事实证明 Heroku 还不完全支持 Java 8,所以我正在降级回 Java 7。
    • 这是我在使用 heroku 和 java 8 以及使用 play 2.2.x 时遇到的问题。我通过将 build.properties 中的 sbt 版本从 0.13.0 更改为 0.13.1 解决了这个问题。可能也适合你
    【解决方案2】:

    作为对 Holger 回应的补充,以下是 Heroku 支持必须说的话:

    嗨,

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-24
      • 2012-03-26
      相关资源
      最近更新 更多