spring-boot - 应用程序已由更新版本的 Java Runtime(类文件版本 55.0)编译,此版本最高为 52.0
问题描述
我正在尝试在 AWS 云中运行 docker 映像,因此在本地,使用 jdk-11.0.1 编译应用程序并像这样编写 docker 文件;请注意,我没有在 AWS ec2 实例中安装任何 JDK,因为我已经在最终映像中包含了采用 openjdk/openjdk11:latest 映像。
FROM adoptopenjdk/openjdk11:latest
ADD target/demo-0.0.1-SNAPSHOT.jar app.jar
ENTRYPOINT ["java","-jar","app.jar"]
EXPOSE 8080
1)create the docker image
2)pushed the docker image to docker hub
3)when I run the docker container then getting below error.
线程“main”中的异常 java.lang.UnsupportedClassVersionError: com/example/demo/DemoApplication 已由 Java 运行时的更新版本(类文件版本 55.0)编译,此版本的 Java 运行时仅识别类文件版本至 52.0
解决方案
很可能 java 已在本地更新,因此您正在使用与您想象的不同的版本进行编译。或者本地版本不同于“adoptopenjdk/openjdk11:latest”。
我建议您使用多阶段构建,以便您的类始终针对相同的 java 版本进行编译。
您如何编写构建阶段取决于您的环境,因此我没有足够的信息来发布示例。但基本上你需要在构建阶段复制你在本地所做的一切。然后你只需将 jar 复制到最后一个阶段。这将永远有效。
推荐阅读
- html - 样式网站有问题。使用较小的浏览器窗口时图像会移动
- python - 将多个 matplotlib 图形合二为一
- ssh - 如何像往常一样在 Cmder ssh 上启用颜色和方案?
- android - 是否可以在 android.defaultConfig 中为 versionCod 设置“字符串”占位符?
- caching - 如何实现动态索引?
- file - 通过 telnet 从 IP 摄像机下载文件
- php - 如何正确地将字符串形式的 post 变量转换为对象或数组
- java - 谷歌地图:当用户足够近时,如何使标记仅可点击?
- java - 按集合中的条件过滤实体
- angular - 地图在强制刷新或鼠标点击之前不会更新