• K8S部署Java项目 pod报错 logs日志内容:no main manifest attribute, in app.jar


    天行健,君子以自强不息;地势坤,君子以厚德载物。


    每个人都有惰性,但不断学习是好好生活的根本,共勉!


    文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。

    尝试此篇之前请先看另一篇(推荐):no main manifest attribute, in app.jar

    1. 场景

    K8S部署Java项目 pod报错

    2. 报错

    使用log命令查看日志报错如下

    kubectl logs podname -n ns-sb
    
    • 1
    no main manifest attribute, in app.jar
    
    • 1

    截图
    在这里插入图片描述

    3. 分析

    报错表示在app.jar中无法找到主类,也就是说在app.jar中无法识别main方法程序入口
    拓展两个词,manifest文件和main class

    • manifest文件是一个文本文件,用来描述jar包的元信息、版本信息、作者信息等,manifest文件通常放在jar包的META-INF文件夹下,命名为MANIFEST.MF
    • main class是一个Java程序的入口,在执行Java程序是会先找到这个类,执行类中的main方法,在jar包中如果没有配置mainfest文件则需要在执行时指定main class,否则无法执行

    no main manifest attribute, in app.jar表示既没有配置manifest文件也没有指定main class,接下来我们配置一下即可

    4. 解决

    4.2 配置manifest文件

    在jar包中的META-INF文件夹(没有就创建一个)中创建MANIFEST.MF文件
    并在文件中定义内容如下:

    Manifest-Version: 1.0 Main-Class: com.gitlab_runner.Application
    
    • 1

    com.gitlab_runner.Application是main方法所在的类Application的包路径,根据自己的定义

    4.2 配置指定main class

    在执行jar包命令程序中添加参数指定main class路径
    在Dockerfile的Java执行程序命令中添加指定主类配置

    java -cp app.jar com.gitlab_runner.Application
    
    • 1

    -cp表示classpath,就是app.jar的main class路径

    Dockerfile文件内容为

    #关键字和值之间可以是空格" "也可以是等号"="
    #指定基础镜像,以此镜像为基础构建
    FROM openjdk:8-jdk-alpine
    
    #作者
    MAINTAINER hs
    
    #设置环境变量
    #JAVA_HOME环境变量定义,即配置jdk安装目录路径,需是jdk文件全路径名
    ENV JAVA_HOME=/usr/local/java/jdk1.8.0.121
    #MAVEN环境变量定义,即maven安装的位置,需是maven全路径名
    ENV MAVEN_HOME=/usr/share/maven
    #配置环境变量
    ENV PATH=$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin
    #指定容器的时区
    ENV TZ=Asia/Shanghai
    
    #复制文件到镜像中,将本地文件或目录复制到镜像指定位置,该操作也在.gitlab-ci.yml文件中脚本进行执行了
    COPY app.jar app.jar
    
    #时区配置,可省略
    #RUN ln -snf /usr/share/zonginfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
    
    #容器入口,该命令应该是将每个字符串组合起来,nohub java -jar app.jar
    ENTRYPOINT ["nohup","java","-jar","-cp","app.jar","com.gitlab_runner.Application"]
    
    #声明要监听的端口(暴露端口,容器内部的端口,这里暂时不用)
    EXPOSE 8089
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    那么我们是maven项目,maven项目配置指定识别的插件即可,在pom中配置插件

    感谢阅读,祝君暴富!


  • 相关阅读:
    idea配置springboot热部署
    矩阵微积分
    How To Purge The UNIFIED AUDIT TRAIL (Doc ID 1582627.1)
    Devart ODBC Driver for BigCommerce 2.0.1
    基于SSM的公选课的选课系统/选课系统的设计与实现
    OFD文件WEB前端展示-easyofd(1.0.6)
    dp入门课(一)
    Eclipse 主网即将上线迎空投预期,Zepoch 节点或成受益者?
    CSS伪类大全!4大类伪类详解
    一文看懂大数据生态圈完整知识体系【大数据技术及架构图解实战派】
  • 原文地址:https://blog.csdn.net/mo_sss/article/details/136211916