当前位置: 首页 > news >正文

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

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


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


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

文章目录

  • 1. 场景
  • 2. 报错
  • 3. 分析
  • 4. 解决
    • 4.2 配置manifest文件
    • 4.2 配置指定main class

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

1. 场景

K8S部署Java项目 pod报错

2. 报错

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

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

截图
在这里插入图片描述

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

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

4.2 配置指定main class

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

java -cp app.jar com.gitlab_runner.Application

-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

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

感谢阅读,祝君暴富!


http://www.lryc.cn/news/306462.html

相关文章:

  • SQL实现模糊查询的四种方法总结
  • 爬虫基本库的使用(urllib库的详细解析)
  • 【PyQt5桌面应用开发】3.Qt Designer快速入门(控件详解)
  • react useMemo 用法
  • python学习笔记 - 标准库函数
  • 校招失败后,在小公司熬了 2 年终于进了字节跳动,竭尽全力....
  • PYTHON-使用正则表达式进行模式匹配
  • Fiddler工具 — 19.Fiddler抓包HTTPS请求(二)
  • 架构设计:流式处理与实时计算
  • Linux系统安装zookeeper
  • 【前端素材】推荐优质后台管理系统Modernize平台模板(附源码)
  • 二、Vue组件化编程
  • JVM跨代引用垃圾回收
  • AI:135-基于卷积神经网络的艺术品瑕疵检测与修复
  • C++标准头文件汇总及功能说明
  • glTF 添加数据属性(extras)
  • linux系统消息中间件rabbitmq普通集群的部署
  • TextCNN:文本分类卷积神经网络
  • 欧几里得和《几何原本》
  • linux c++ 开发 tensorrt 安装
  • Redis高并发分布锁实战
  • Kotlin基础——DSL
  • 《Docker 简易速速上手小册》第4章 Docker 容器管理(2024 最新版)
  • 【人脸朝向识别与分类预测】基于PNN神经网络
  • 【Python笔记-设计模式】组合模式
  • 51单片机学习(5)-----蜂鸣器的介绍与使用
  • -bash: /root/.ssh/authorized_keys: Read-only file system
  • 3,设备无关位图显示
  • 转前端了!!
  • RESTful API如何使用它构建 web 应用程序。