You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Eclipse导出含MANIFEST.MF的JAR文件后提示“No main manifest attribute in jar”的问题及MANIFEST.MF末尾空行含义咨询

问题解答:JAR运行提示“No main manifest attribute”的原因及清单文件空行的作用

一、你遗漏的关键步骤及问题根源

出现“No main manifest attribute in jar”错误,大概率是以下几个环节出了问题,我给你逐一拆解:

  • 目录名称拼写错误:你提到在src下创建了META-MF文件夹,但Java规范要求清单文件必须放在META-INF(注意是INF不是MF)目录下。Eclipse和JVM只会识别这个标准目录,所以目录名写错的话,你的自定义清单根本不会被打包进JAR里,自然找不到Main-Class属性。

  • 导出JAR时未指定自定义清单:Eclipse导出JAR的默认流程会自动生成一个新的MANIFEST.MF,如果你没有手动指定使用自己创建的那个,Eclipse就会用它生成的默认清单(里面没有Main-Class配置)覆盖你的文件。正确的导出步骤应该是:

    1. 右键项目 → 导出 → JAR文件
    2. 选择要打包的文件后,进入“Jar Manifest Specification”界面
    3. 勾选“Use existing manifest from workspace”,然后通过浏览选择你src下META-INF/MANIFEST.MF文件
    4. 完成后续导出步骤
  • 清单文件格式不符合规范:即使目录和导出步骤都对,如果你的MANIFEST.MF格式有问题,JVM也无法识别Main-Class。比如:

    • Main-Class: FrameLogin这一行,冒号后面必须有一个空格
    • 每个属性行(包括Manifest-Version和Main-Class)都要以换行结尾,且文件末尾必须保留空行(这个刚好对应你的额外问题)

二、为什么清单文件末尾需要保留空行?

Java的清单文件解析器是按行读取并解析属性的,它会把每一个以换行结束的行视为一个完整的属性条目。如果你的清单文件最后一行(比如Main-Class: FrameLogin)后面没有空行,解析器会认为这个属性没有完全结束,从而忽略它。简单来说,空行是在告诉解析器:“这个属性已经结束了,没有后续内容了”,确保所有配置的属性都能被正确识别加载。

举个例子,正确的MANIFEST.MF格式应该是这样的:

Manifest-Version: 1.0
Main-Class: FrameLogin

(注意最后一行是空的)

内容的提问来源于stack exchange,提问作者xxx

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 09:27:47