【发布时间】:2020-06-01 14:24:30
【问题描述】:
在尝试在 aks 上部署 java springboot 微服务时,我不断给我 UnsupportedClassVersionError。我正在使用 "kubectl apply -f file.yaml" 命令来应用部署。即使现在编译为正确的编译器版本,它仍然抱怨相同。不知道我在哪里失踪。
第一次尝试
- 使用 oracle openjdk 11 编译
- 使用 javap -verbose MyApplication 检查编译的类版本 | findstr "major"
控制台输出 - 主要版本:55
- 部署到 aks 失败
第二次尝试
- 使用 oracle jdk 1.8 编译
- 使用'javap -verbose MyApplication | 检查编译的类版本。 findstr "major" '
控制台输出 - 主要版本:52
- 部署到 aks 失败
两种部署通用
- 使用命令“kubectl apply -f myapp.yaml”部署在 aks 集群上
- 收到相同的错误,即,
> Exception in thread "main" java.lang.UnsupportedClassVersionError:
> MyApplication 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
> at java.lang.ClassLoader.defineClass1(Native Method)
> at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
> at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
> at java.net.URLClassLoader.defineClass(URLClassLoader.java:468)
> at java.net.URLClassLoader.access$100(URLClassLoader.java:74)
> at java.net.URLClassLoader$1.run(URLClassLoader.java:369)
> at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
> at java.security.AccessController.doPrivileged(Native Method)
> at java.net.URLClassLoader.findClass(URLClassLoader.java:362)
> at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
> at org.springframework.boot.loader.LaunchedURLClassLoader.loadClass(LaunchedURLClassLoader.java:92)
> at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
> at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:46)
> at org.springframework.boot.loader.Launcher.launch(Launcher.java:87)
> at org.springframework.boot.loader.Launcher.launch(Launcher.java:51)
> at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:52)
请求帮助
问候
【问题讨论】:
-
您使用的是什么版本的 Spring Boot?确保您使用的是支持正确 jdk 的 Spring Boot 版本
-
虽然您可能已经使用 Java 8 编译器编译了代码,但运行时类路径似乎仍然包含使用 Java 11 编译的类。
-
Thx @Stephen,但是在第二次尝试中,我验证了编译后的类主版本,它显示的是 52 而不是 55。当我在本地 docker 中尝试时,这会发生什么变化,与部署相比,它运行平稳在 aks 上。
-
嗨解决了这个问题。部署的 pod 没有拉取最新版本的映像。使用 imagePullPolicy:始终添加到 yaml 清单并强制使用 kubectl replace --force 选项强制重新创建部署和服务,它是从最新(新)映像部署的,而不是使用其缓存。谢谢
标签: java docker kubernetes