java项目中jar启动执行日志报错:no main manifest attribute, in /www/wwwroot/snow-server/z-server.jar-jar打包的大小明显小于正常大小如何解决

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 在Java项目中,启动jar包时遇到“no main manifest attribute”错误,且打包大小明显偏小。常见原因包括:1) Maven配置中跳过主程序打包;2) 缺少Manifest文件或Main-Class属性。解决方案如下:

java项目中jar启动执行日志报错:no main manifest attribute, in /www/wwwroot/snow-server/z-server.jar-jar打包的大小明显小于正常大小如何解决

问题背景

在部署优雅草蜻蜓z系统的时候也遇到这个问题,那么如何解决呢、这个问题基本就是构建脚本中没有指定主类,而且我们发现打包的大小明显小于正常大小,
造成的原因有以下3种可能:

1,maven打包中多余true配置跳过了主程序

2,这个问题通常是由于生成的jar包缺少Manifest文件中的Main-Class属性引起的,甚至是没有Manifest文件引起的。

解决方案

第一种原因引起

问题很好处理,注释或者直接删除在build 中 关于 有skip ture的。

也就是这个造成的
<plugins>

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
</plugins>

不过这个问题我们并没有

因此排除。

第二种原因引起

方法一:手动添加或修改Manifest文件(没有使用maven)

以优雅草蜻蜓z系统为例,我们的主类com.yyc.songshu.manager

那么我就创建一个Manifest.mf文件里面的内容就是

Manifest-Version: 1.0
Main-Class: com.yyc.songshu.manager

com.yyc.songshu.manager 是写你自己的项目主类名

编译打包,执行”jar cvfm z-server.jar Manifest.mf com.yyc.songshu.manager “

这里,com.yyc.songshu.manager是你的JAR文件名,Manifest.mf是你的Manifest文件,com.yyc.songshu.manager/是包含你编译的.class文件的目录。

扩展知识:

基本命令介绍
在 Java 中,jar cvfm是用于创建 JAR(Java Archive)文件的命令。jar是 Java Archive 工具的命令,c代表创建(create),v代表详细输出(verbose),f代表指定文件名(file),m代表包含清单文件(manifest)。
具体参数解释
c(创建)
这个参数告诉jar工具要创建一个新的 JAR 文件。例如,你有一些编译好的.class文件和其他资源文件,如配置文件、图片等,使用c参数就可以将它们打包成一个 JAR 文件,方便分发和使用。
v(详细输出)
当使用v参数时,在创建 JAR 文件的过程中,命令会在控制台输出详细的打包信息。这些信息包括正在添加的文件的名称、大小等内容。例如,它会显示 “adding: com/company/MyClass.class (3420 bytes)” 这样的信息,让你清楚地了解每个文件的打包情况。
f(指定文件名)
f参数用于指定要创建的 JAR 文件的名称。如果不使用这个参数,jar工具会根据标准输入来确定文件名,但这样可能会导致一些混淆。通过使用f参数,你可以明确地指定一个文件名,如myapp.jar,这样生成的 JAR 文件就会按照你指定的名称保存。
m(包含清单文件)
m参数用于将一个清单文件(META - INF/MANIFEST.MF)包含到 JAR 文件中。清单文件是 JAR 文件中的一个重要组成部分,它可以包含关于 JAR 文件的各种信息,如主类(Main - Class)的名称、版本信息、类路径等。例如,在一个可执行的 JAR 文件中,清单文件中的主类名称是非常关键的,因为当你运行这个 JAR 文件时,Java 虚拟机会根据清单文件中的主类来启动应用程序。

但是我们打包是用的maven 因此需要以下方法二

方法二:使用maven构建工具

使用maven构建工具来管理Java项目的情况,你可以在构建脚本中指定主类。在pom.xml文件添加以下内容

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.1.0</version>
<configuration> <archive> <manifest> <addClasspath>true</addClasspath>
<mainClass>com.yyc.songshu.manager</mainClass>
</manifest>
</archive> </configuration></plugin>

这回我们重新打包试试,成功,再次上传jar 去执行,现在没问题了。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
打赏
0
7
8
1
184
分享
相关文章
解决 Java 打印日志吞异常堆栈的问题
前几天有同学找我查一个空指针问题,Java 打印日志时,异常堆栈信息被吞了,导致定位不到出问题的地方。
65 2
|
4月前
|
【Azure Developer】com.azure:azure-identity jar包版本从1.2.0 升级到1.12.2 版本之后报错
在将 `com.azure:azure-identity` 的 jar 包版本从 1.2.0 升级到 1.12.2 后出现错误,错误信息表明存在方法未找到的问题。分析显示这是由于依赖管理错误导致,需要调整 classpath 确保使用兼容版本的依赖包。当前项目中 msal4j-1.11.0.jar 与 azure-identity-1.12.2 不兼容。
【C++】CentOS环境搭建-安装log4cplus日志组件包及报错解决方案
通过上述步骤,您应该能够在CentOS环境中成功安装并使用log4cplus日志组件。面对任何安装或使用过程中出现的问题,仔细检查错误信息,对照提供的解决方案进行调整,通常都能找到合适的解决之道。log4cplus的强大功能将为您的项目提供灵活、高效的日志管理方案,助力软件开发与维护。
118 0
搭建dns服务常见报错--查看/etc/named.conf没有错误日志信息却显示出错(/etc/named.conf:49: missing ‘;‘ before ‘include‘)及dns介绍
搭建dns服务常见报错--查看/etc/named.conf没有错误日志信息却显示出错(/etc/named.conf:49: missing ‘;‘ before ‘include‘)及dns介绍
270 0
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
本文介绍了Java日志框架的基本概念和使用方法,重点讨论了SLF4J、Log4j、Logback和Log4j2之间的关系及其性能对比。SLF4J作为一个日志抽象层,允许开发者使用统一的日志接口,而Log4j、Logback和Log4j2则是具体的日志实现框架。Log4j2在性能上优于Logback,推荐在新项目中使用。文章还详细说明了如何在Spring Boot项目中配置Log4j2和Logback,以及如何使用Lombok简化日志记录。最后,提供了一些日志配置的最佳实践,包括滚动日志、统一日志格式和提高日志性能的方法。
815 31
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
什么是Apache日志?为什么Apache日志分析很重要?
Apache是全球广泛使用的Web服务器软件,支持超过30%的活跃网站。它通过接收和处理HTTP请求,与后端服务器通信,返回响应并记录日志,确保网页请求的快速准确处理。Apache日志分为访问日志和错误日志,对提升用户体验、保障安全及优化性能至关重要。EventLog Analyzer等工具可有效管理和分析这些日志,增强Web服务的安全性和可靠性。
|
4月前
|
Logback 与 log4j2 性能对比:谁才是日志框架的性能王者?
【10月更文挑战第5天】在Java开发中,日志框架是不可或缺的工具,它们帮助我们记录系统运行时的信息、警告和错误,对于开发人员来说至关重要。在众多日志框架中,Logback和log4j2以其卓越的性能和丰富的功能脱颖而出,成为开发者们的首选。本文将深入探讨Logback与log4j2在性能方面的对比,通过详细的分析和实例,帮助大家理解两者之间的性能差异,以便在实际项目中做出更明智的选择。
429 3
MySQL事务日志-Undo Log工作原理分析
事务的持久性是交由Redo Log来保证,原子性则是交由Undo Log来保证。如果事务中的SQL执行到一半出现错误,需要把前面已经执行过的SQL撤销以达到原子性的目的,这个过程也叫做"回滚",所以Undo Log也叫回滚日志。
MySQL事务日志-Undo Log工作原理分析
什么是事件日志管理系统?事件日志管理系统有哪些用处?
事件日志管理系统是IT安全的重要工具,用于集中收集、分析和解释来自组织IT基础设施各组件的事件日志,如防火墙、路由器、交换机等,帮助提升网络安全、实现主动威胁检测和促进合规性。系统支持多种日志类型,包括Windows事件日志、Syslog日志和应用程序日志,通过实时监测、告警及可视化分析,为企业提供强大的安全保障。然而,实施过程中也面临数据量大、日志管理和分析复杂等挑战。EventLog Analyzer作为一款高效工具,不仅提供实时监测与告警、可视化分析和报告功能,还支持多种合规性报告,帮助企业克服挑战,提升网络安全水平。
100 2
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等