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

news2024/9/23 3:23:36

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


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


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

文章目录

  • 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.coloradmin.cn/o/1468083.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

责任链模式与spring容器的搭配应用

背景 有个需求,原先只涉及到一种A情况设备的筛选,每次筛选会经过多个流程,比如先a功能,a功能通过再筛选b功能,然后再筛选c功能,以此类推。现在新增了另外一种B情况的筛选,B情况同样需要A情况的筛…

NestJS入门7:增加异常过滤器

前文参考: NestJS入门1 NestJS入门2:创建模块 NestJS入门3:不同请求方式前后端写法 NestJS入门4:MySQL typeorm 增删改查 NestJS入门5:加入Swagger NestJS入门6:日志中间件 本文代码基于上一篇文章《…

数字化转型导师坚鹏:政府数字化流程管理

政府数字化流程管理 课程背景: 很多政府存在以下问题: 不清楚数字化对流程有什么影响? 不知道政府业流程如何进行优化? 不知道政府业流程优化的具体案例? 课程特色: 有实战案例 有原创观点 …

【大厂AI课学习笔记NO.52】2.3深度学习开发任务实例(5)需求采集考虑维度

今天来学习,怎么做需求分析,如何明确数据采集需求。 我把自己考试通过的学习笔记,都分享到这里了,另外还有一个比较全的思维脑图,我导出为JPG文件了。下载地址在这里:https://download.csdn.net/download/g…

【C++私房菜】面向对象中的多态

文章目录 一、多态二、对象的静态类型和动态类型三、虚函数和纯虚函数1、虚函数2、虚析构函数3、抽象基类和纯虚函数4、多态的原理 四、重载、覆盖(重写)、隐藏(重定义)的对比 一、多态 OOP的核心思想是多态性(polymorphism)。多态性这个词源自希腊语,其含义是“多…

免费多域名证书,最多支持保护250个域名

随着企业规模扩大和多元化发展,拥有多个域名的需求变得普遍,此时,多域名SSL证书应运而生,并且这一类型的证书已经发展到能够安全地支持多达250个不同域名的加密需求。 多域名SSL证书,也称为SAN(Subject Alt…

【《高性能 MySQL》摘录】第 2 章 MySQL基准测试

文章目录 2.1 为什么需要基准测试2.2 基准测试的策略2.2.1 测试何种指标 2.3 基准测试方法2.3.1 设计和规划基准测试2.3.2 基准测试应该运行多长时间2.3.3 获取系统性能和状态2.3.4 获得准确的测试结果2.3.5 运行基准测试并分析结果2.3.6 绘图的重要性 2.4 基准测试工具…

[面试] 什么是死锁? 如何解决死锁?

什么是死锁 死锁,简单来说就是两个或者多个的线程在执行的过程中,争夺同一个共享资源造成的相互等待的现象。如果没有外部干预线程会一直阻塞下去. 导致死锁的原因 互斥条件,共享资源 X 和 Y 只能被一个线程占用; 请求和保持条件&#xf…

【第七天】C++模板探秘:函数模板、类模板以及类型转换的深入解析

一、模板的概述 c面向对象编程思想:封装、继承、多态 c泛型编程思想:模板 模板的分类:函数模板、类模板 函数模板(类模板):将功能相同,类型不同的函数(类)的类型抽象成虚…

Java+Vue:宠物猫认养系统的未来之路

✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 |…

网购商城系统源码 积分兑换商城系统源码 独立后台附教程

应用介绍 本文来自:网购商城系统源码 积分兑换商城系统源码 独立后台附教程 - 源码1688 简介: 网购商城系统源码 积分兑换商城系统源码 独立后台附教程 测试环境:NginxPHP7.0MySQL5.6thinkphp伪静态 图片:

进程与线程之进程的理解

首先对堆栈等进程运行过程中的内存有了更深层次的理解: 我们之前了解到,程序在运行中存在堆栈,字符串常量区代码区。 现在我们提出虚拟内存的概念:程序在运行的过程中开辟0~4G的虚拟空间使用MUU映射单元映射到物理地址上 简而言…

板块二 JSP和JSTL:第四节 EL表达式 来自【汤米尼克的JAVAEE全套教程专栏】

板块二 JSP和JSTL:第四节 EL表达式 一、什么是表达式语言二、表达式取值(1)访问JSP四大作用域(2)访问List和Map(3)访问JavaBean 三、 EL的各种运算符(1).和[ ]运算符&…

Jmeter基础(3) 发起一次请求

目录 Jmeter 一次请求添加线程组添加HTTP请求添加监听器 Jmeter 一次请求 用Jmeter进行一次请求的过程,需要几个步骤呢? 1、添加线程组2、添加HTTP请求3、添加监听器,查看结果树 现在就打开jmeter看下如何创建一个请求吧 添加线程组 用来…

Spring Boot 笔记 029 用户模块

1.1 用户信息需要在多个链接使用,所以需要用pinia持久化 1.1.1 定义store import {defineStore} from pinia import {ref} from vue const useUserInfoStore defineStore(userInfo,()>{//定义状态相关的内容const info ref({})const setInfo (newInfo)>{i…

关于uniapp H5应用无法在触摸屏正常显示的处理办法

关于uniapp H5应用无法在触摸屏正常显示的处理办法 1、问题2、处理3、建议 1、问题 前几天, 客户反馈在安卓触摸大屏上无法正确打开web系统(uni-app vue3开发的h5 应用),有些页面显示不出内容。该应用在 pc 端和手机端都可以正常…

easyrecovery数据恢复软件14中文绿色版下载

EasyRecovery易恢复14全面介绍 一、功能概览 EasyRecovery易恢复14是一款功能强大的数据恢复软件,旨在帮助用户从各种存储介质中恢复丢失或删除的文件。无论是由于误删、格式化、系统崩溃还是其他未知原因导致的数据丢失,EasyRecovery易恢复14都能提供…

基于qt的图书管理系统----03核心界面设计

参考b站:视频连接 源码github:github 目录 1 添加软件图标2 打包程序3 三个管理界面设计4 代码编写4.1 加载界面4.2 点击按钮切换界面4.3 组团添加样式4.4 搭建表头4.5 表格相关操作 从别人那里下载的项目会有这个文件,里边是别人配置的路径…

力扣 187. 重复的DNA序列

1.题目 DNA序列 由一系列核苷酸组成,缩写为 A, C, G 和 T.。 例如,"ACGAATTCCG" 是一个 DNA序列 。 在研究 DNA 时,识别 DNA 中的重复序列非常有用。 给定一个表示 DNA序列 的字符串 s ,返回所有在 DNA 分子中出现不止一…

【大模型 数据增强】IEPILE:基于模式的指令生成解法,提高大模型在信息抽取任务上的性能

IEPILE:基于模式的指令生成解法,提高大模型在信息抽取任务上的性能 提出背景基于模式的指令生成解法效果 提出背景 论文:https://arxiv.org/pdf/2402.14710.pdf 代码:https://github.com/zjunlp/IEPile 假设我们有一个信息抽取任…