CF推送失败的Java版本不匹配

问题描述

我正在尝试将“ spring-music”演示应用程序推送到我本地的开发云基金会,但是我遇到了错误。当我运行命令“ cf logs spring-music --recent”时,输出如下。

2020-10-21T00:41:39.96+0300 [APP/PROC/WEB/0] OUT JVM Memory Configuration: -Xmx408076K -Xss1M -XX:ReservedCodeCacheSize=240M -XX:MaxDirectMemorySize=10M -XX:MaxMetaspaceSize=128499K
   2020-10-21T00:41:40.64+0300 [APP/PROC/WEB/0] ERR Exception in thread "main" java.lang.UnsupportedClassversionError: org/cloudfoundry/samples/music/Application has been compiled by a more recent version of the Java Runtime (class file version 55.0),this version of the Java Runtime only recognizes class file versions up to 52.0                                                                                                                                                                                                                   
   2020-10-21T00:41:40.64+0300 [APP/PROC/WEB/0] ERR     at java.lang.classLoader.defineClass1(Native Method)
   2020-10-21T00:41:40.64+0300 [APP/PROC/WEB/0] ERR     at java.lang.classLoader.defineClass(ClassLoader.java:756)
   2020-10-21T00:41:40.64+0300 [APP/PROC/WEB/0] ERR     at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
   2020-10-21T00:41:40.64+0300 [APP/PROC/WEB/0] ERR     at java.net.urlclassloader.defineClass(urlclassloader.java:468)
   2020-10-21T00:41:40.64+0300 [APP/PROC/WEB/0] ERR     at java.net.urlclassloader.access$100(urlclassloader.java:74)
   2020-10-21T00:41:40.64+0300 [APP/PROC/WEB/0] ERR     at java.net.urlclassloader$1.run(urlclassloader.java:369)
   2020-10-21T00:41:40.64+0300 [APP/PROC/WEB/0] ERR     at java.net.urlclassloader$1.run(urlclassloader.java:363)
   2020-10-21T00:41:40.64+0300 [APP/PROC/WEB/0] ERR     at java.security.AccessController.doPrivileged(Native Method)
   2020-10-21T00:41:40.64+0300 [APP/PROC/WEB/0] ERR     at java.net.urlclassloader.findClass(urlclassloader.java:362)
   2020-10-21T00:41:40.64+0300 [APP/PROC/WEB/0] ERR     at java.lang.classLoader.loadClass(ClassLoader.java:418)
   2020-10-21T00:41:40.64+0300 [APP/PROC/WEB/0] ERR     at org.springframework.boot.loader.Launchedurlclassloader.loadClass(Launchedurlclassloader.java:92)
   2020-10-21T00:41:40.64+0300 [APP/PROC/WEB/0] ERR     at java.lang.classLoader.loadClass(ClassLoader.java:351)
   2020-10-21T00:41:40.64+0300 [APP/PROC/WEB/0] ERR     at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:46)
   2020-10-21T00:41:40.64+0300 [APP/PROC/WEB/0] ERR     at org.springframework.boot.loader.Launcher.launch(Launcher.java:87)
   2020-10-21T00:41:40.64+0300 [APP/PROC/WEB/0] ERR     at org.springframework.boot.loader.Launcher.launch(Launcher.java:51)
   2020-10-21T00:41:40.64+0300 [APP/PROC/WEB/0] ERR     at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:52)

解决方法

请注意:

Application has been compiled by a more recent version of the Java Runtime (class file version 55.0),this version of the Java Runtime only recognizes class file versions up to 52.0

您已经使用Java 11的编译器编译了项目,这使您获得了字节码版本55.0;

您的主机正在运行Java 8,该计算机运行字节码版本52.0

您可以cross-compile您的项目以支持较早的Java版本。请参阅here的操作方法。

,

虽然Giorgi's answer也是正确的,但您可能只想使用Java 11来运行您的应用。

您可以告诉Java buildpack您想要安装Java 11,而不是默认的Java 8(我写这篇文章)。

对您的应用运行cf set-env <app-name> JBP_CONFIG_OPEN_JDK_JRE '{jre: { version: 11.+ }}'或将该env变量添加到manifest.yml中。然后cf restage您的应用程序。 Java buildpack将看到它并自动为您安装Java 11。