Skip to content

Docker run报错no main manifest attribute, in app.jar

  • 将插件的 <skip>true</skip> 替换成 <layout>JAR</layout>

  • 原来的写法

    1ded479fcfb01b0e12bf7924d2cde85e.png

  • 修改的写法

    4339927afb685d9a540e439b901bbb63.png

Docker启动容器报错:java版本不兼容

  • 报错信息

    Error: A JNI error has occurred, please check your installation and try again
    Exception in thread "main" java.lang.UnsupportedClassVersionError: org/springframework/boot/loader/launch/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 52.0
  • 问题解释:容器使用的是较新的java编译的(class file version 61.0),但是当前系统java运行环境只能识别到52.0

  • 常见的版本对应关系

    JAVA版本class file version
    Java 8class file version 52.0
    Java 9class file version 53.0
    Java 10class file version 54.0
    Java 11class file version 55.0
    Java 12class file version 56.0
    Java 13class file version 57.0
    Java 14class file version 58.0
    Java 15class file version 59.0
    Java 16class file version 60.0
    Java 17class file version 61.0
    Java 18class file version 62.0
    Java 19class file version 63.0
    Java 20class file version 64.0
    Java 21class file version 65.0
  • 所以需要修改Dockerfile文件,指定openjdk的版本

    dockerfile
    FROM anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/openjdk:17-8.6
    COPY /target/mcp-0.0.1-SNAPSHOT.jar mcp.jar
    EXPOSE 8888
    ENTRYPOINT ["java", "-jar", "mcp.jar"]
  • 扩展点

    • 如何确定打包后的jar包所用的jdk版本?

      • 查看jar包下的 META-INF/MANIFEST.MF 文件中的 Build-Jdk-Spec的版本

        image-20250811210635985

    • 获取基础镜像

      1. 登录阿里云,打开容器镜像服务页面,搜索jdk 容器镜像服务 ACR 控制台

        image-20250811210515303

      2. 查看制品地址和版本号

        image-20250811210812634

      3. 制品地址:版本号,即为基础镜像

MIT版权,未经许可禁止任何形式的转载