部署到Google App Engine时出现java.lang.UnsupportedClassVersionError

6yjfywim  于 2023-04-19  发布在  Java
关注(0)|答案(1)|浏览(144)

我开发了一个Spring Boot REST API,当我使用this指南将其部署到Google App Engine时,我得到了错误[INFO] GCLOUD: java.lang.UnsupportedClassVersionError: org/springframework/boot/loader/JarLauncher has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versions up to 53.0
我确保通过<java.version>9</java.version>maven中使用Java 9编译应用程序。然后我还确保在app.yaml中为Google App Engine指定openjdk9。我使用mvn clean install appengine:deploy -P cloud-gcp -DskipTests进行了干净的构建和部署,但错误仍然存在。
根据this table,代码显然是使用Java 17编译的(不正确),但试图使用Java 9运行(正确)。据我所知,我没有在任何地方将代码配置为使用Java 17编译。

编辑:

后来我在谷歌上搜索了一下,发现是Spring Boot 3 requires a minimum of Java 17,似乎就是它了。所以我不能在Google App Engine上使用Spring Boot 3,因为Google App Engine only supports openjdk8 and openjdk9,所以我不得不降级Spring Boot,这是我不想做的。
有没有办法在Google App Engine上使用openjdk17

rryofs0p

rryofs0p1#

基于Java 11/17运行时环境的文档:
Java 11/17运行时使用在app.yaml文件中指定的最新稳定版本。App Engine会自动更新到新的修补程序版本,但不会自动更新次要版本。
App Engine在最新Ubuntu Linux发行版上的gVisor保护的容器中运行Java 11/17应用程序,并支持用于Java 11的openjdk-11-jdk或用于Java 17运行时的openjdk-17-jdk。

  • Java 11在Ubuntu 18.04上运行
  • Java 17在Ubuntu 22.04上运行

您应该在runtime中声明您希望使用的运行时环境:

runtime: java17 # or another supported runtime
entrypoint: java -Xmx64m -jar YOUR-ARTIFACT.jar

相关问题