jar包中的MANIFEST.MF文件说明与书写规范

Manifest文件在编程中的作用及示例代码 Manifest文件在编程中起着重要的作用,它可以描述程序的配置信息,包括入口点、依赖项和资源文件等。方便的配置管理:通过Manifest文件,开发者可以集中管理程序的配置信息,包括入口点、依赖项和资源文件等。资源文件管理:Manifest文件可以指定程序所需的资源文件,如图像、音频、配置文件等,以便在程序运行时能够正确地访问和使用这些资源。程序的入口点:Manifest文件可以告诉系统或运行环境程序的入口点是哪个文件或函数,从而使程序能够正确启动和执行。:指定程序所依赖的外部库文件的路径,这里是。 阅读详情

参考百度百科的解释如下:

http://baike.baidu.com/item/MANIFEST.MF

MANIFEST.MF:这个 manifest 文件定义了与扩展和包相关的数据。单词“manifest”的意思是“显示”

打开Java的JAR文件我们经常可以看到文件中包含着一个META-INF目录,这个目录下会有一些文件,其中必有一个MANIFEST.MF,这个文件描述了该Jar文件的很多信息,下面将详细介绍MANIFEST.MF文件的内容,先来看struts.jar中包含的MANIFEST.MF文件内容:

Manifest-Version: 1.0

Created-By: Apache Ant 1.5.1

Extension-Name: Struts Framework

Specification-Title: Struts Framework

Specification-Vendor: Apache Software Foundation

Specification-Version: 1.1

Implementation-Title: Struts Framework

Implementation-Vendor: Apache Software Foundation

Implementation-Vendor-Id: org.apache

Implementation-Version: 1.1

Class-Path: commons-beanutils.jar commons-collections.jar commons-digester.jar commons-logging.jar commons-validator.jar jakarta-oro.jar struts-legacy.jar

如果我们把MANIFEST中的配置信息进行分类,可以归纳出下面几个大类:

一. 一般属性

1. Manifest-Version

用来定义manifest文件的版本,例如:Manifest-Version: 1.0

2. Created-By

声明该文件的生成者,一般该属性是由jar命令行工具生成的,例如:Created-By: Apache Ant 1.5.1

3. Signature-Version

定义jar文件的签名版本

4. Class-Path

应用程序或者类装载器使用该值来构建内部的类搜索路径

二. 应用程序相关属性

1. Main-Class

定义jar文件的入口类,该类必须是一个可执行的类,一旦定义了该属性即可通过 java -jar x.jar来运行该jar文件。

三. 小程序(Applet)相关属性

1. Extendsion-List

该属性指定了小程序需要的扩展信息列表,列表中的每个名字对应以下的属性

2. <extension>-Extension-Name

3. <extension>-Specification-Version

4. <extension>-Implementation-Version

5. <extension>-Implementation-Vendor-Id

5. <extension>-Implementation-URL

四. 扩展标识属性

1. Extension-Name

该属性定义了jar文件的标识,例如Extension-Name: Struts Framework

五. 包扩展属性

1. Implementation-Title 定义了扩展实现的标题

2. Implementation-Version 定义扩展实现的版本

3. Implementation-Vendor 定义扩展实现的组织

4. Implementation-Vendor-Id 定义扩展实现的组织的标识

5. Implementation-URL : 定义该扩展包的下载地址(URL)

6. Specification-Title 定义扩展规范的标题

7. Specification-Version 定义扩展规范的版本

8. Specification-Vendor 声明了维护该规范的组织

9. Sealed 定义jar文件是否封存,值可以是true或者false (这点我还不是很理解)

六. 签名相关属性

签名方面的属性我们可以来参照JavaMail所提供的mail.jar中的一段

Name: javax/mail/Address.class

Digest-Algorithms: SHA MD5

SHA-Digest: AjR7RqnN//cdYGouxbd06mSVfI4=

MD5-Digest: ZnTIQ2aQAtSNIOWXI1pQpw==

这段内容定义类签名的类名、计算摘要的算法名以及对应的摘要内容(使用BASE64方法进行编码)

七.自定义属性

除了前面提到的一些属性外,你也可以在MANIFEST.MF中增加自己的属性以及响应的值,例如J2ME程序jar包中就可能包含着如下信息

MicroEdition-Configuration: CLDC-1.0

MIDlet-Name: J2ME_MOBBER Midlet Suite

MIDlet-Info-URL: http://www.javayou.com/

MIDlet-Icon: /icon.png

MIDlet-Vendor: Midlet Suite Vendor

MIDlet-1: mobber,/icon.png,mobber

MIDlet-Version: 1.0.0

MicroEdition-Profile: MIDP-1.0

MIDlet-Description: Communicator

关键在于我们怎么来读取这些信息呢?其实很简单,JDK给我们提供了用于处理这些信息的API,详细的信息请见java.util.jar包中,我们可以通过给JarFile传递一个jar文件的路径,然后调用JarFile的getManifest方法来获取Manifest信息。

备注:更详细的说明,参考oracle提供的文档:http://docs.oracle.com/javase/1.5.0/docs/guide/jar/jar.html(这个地址其实是有规律的,试下后面的版本号更新到特定的)

 

编写MANIFEST.MF文件时的注意事项:

说明:一般编写MANIFEST.MF文件只需要用到Manifest-Version(MF文件版本号)、Main-Class(包含main方法的类)、Class-Path(执行这个jar包时的ClassPath,第三方依赖)

比如以下的例子:

Manifest-Version: 1.0 
Main-Class: test.Main 
Class-Path: ./ ./lib/commons-collections-3.2.jar ./lib/commons-dbcp-1.2.2.jar ./lib/commons-lang-2.3.jar ./lib/commons-logging-1.1.jar 

以下是需要注意的各个要点: 

0. 最后一样一定要回车,空一行,不然无法识别最后一行的配置。

1. Manifest-Version、Main-Class和Class-Path后面跟着一个英文的冒号,冒号后面必须跟着一个空格,然后才是版本号、类和ClassPath。 

2. Class-Path中的各项应使用空格分隔,不是逗号或分号。 

3. Class-Path中如果有很多项,写成一行打包的时候会报错line too long,这时需要把Class-Path分多行写。注意:从第二行开始,必须以两个空格开头,三个以上我没试过,不过不用空格开头和一个空格开头都是不行的,我已经试过了。 

4. Class-Path写完之后最后一定要有一个空行。 

5. jar包内有些配置文件想放在jar包外面,比如文件config.properties:如果这个文件是以路径方式载入的,比如new file("./config/config.properties"),那么将config.properties放在jar包相同目录下的config目录下即可,也就是说“./”路径等价于jar包所在目录;如果这个文件是以ClassPath下的文件这种方式载入的,比如在Spring中载入classpath:config.properties,则在MF文件的配置文件的ClassPath中添加“./”,然后将这个配置文件与jar包放在同一个目录即可,当然也可以在MF文件的配置文件的ClassPath中添加“./config/”,然后把配置文件都放在jar包相同目录下的config目录下。

创建与运行Java可执行JAR文件的详细指南 Java可执行JAR文件,或称为可执行档案文件,是Java平台上一种包含程序资源的压缩包格式。它不仅能存储Java类文件,还包括编译后的字节码、程序使用的库文件、资源文件和清单文件(MANIFEST.MF),后者指定了JAR文件的主类,即程序启动的入口点。与传统的.class文件相比,JAR文件具有更好的组织结构、更易于部署以及简化了发布流程的特点。这种格式在Java平台上广泛应用于应用程序的打包和分发,尤其是在服务端和桌面应用的开发中尤为重要。 阅读详情

相关推荐

Chronos:学习时间序列的大语言模型(论文解读)

《Chronos:学习时间序列的大语言模型》论文翻译

qq_20144897的博客 9054

引入自己打包的jar,getimplementationversion返回为null

说一下使用场景,我引入自己打包的生成的jar包,想获取当前这个jar的版本号,出现返回为null的情况 import com.ql.qlredis.controller.RedisController; public class TestVersion { public static void main(String[] args) { //RedisController是我定义的jar包中的类 System.out.println(RedisControlle

fbvukn的博客 1649

告别效率低谷:用ADS仿真手把手教你设计高回退Doherty功放(附1:2非对称案例)

本文详细解析了如何使用ADS仿真设计高回退Doherty功放,特别针对1:2非对称架构进行深入探讨。通过优化功率分配比、峰值管开启阈值等关键参数,显著提升功放在9dB回退点的效率至75%以上,适用于LTE等高PAPR信号场景。文章还提供了ADS仿真环境搭建、参数优化及工程化设计的实用技巧。

weixin_33743248的博客 453

mainifest.mf

打开Java的JAR文件我们经常可以看到文件中包含着一个META-INF目录,这个目录下会有一些文件,其中必有一个MANIFEST.MF,这个文件描述了该Jar文件的很多信息,下面将详细介绍MANIFEST.MF文件的内容,先来看struts.jar中包含的MANIFEST.MF文件内容: Manifest-Version: 1.0 Created-By: Apache Ant 1.5.1...

yff1123570554的专栏 716

从0到1:提示工程架构师搭建Agentic AI系统的全流程实战手册

Agentic AI(自主智能体)是具备自主决策能力的大模型应用感知(Perceive):获取外部环境信息(比如代码仓库、用户输入、数据库数据);记忆(Memory):存储和检索历史信息(比如过去的审计记录、用户偏好);规划(Plan):将复杂任务拆解为可执行的步骤(比如“代码审计”拆成3步);行动(Act):调用工具或API完成具体操作(比如调用Git克隆仓库、调用Safety查漏洞);反馈(Feedback):根据结果调整策略(比如用户说“报告不够详细”,下次增加逻辑漏洞的分析深度)。

AI Agent Harness Engineering 1042

保姆级教程:在Davinci Configurator里配置BswM的ECU状态机(附状态切换流程图)

本文提供了一份详细的AUTOSAR BswM模块配置指南,通过Davinci Configurator工具实现ECU状态机的构建与管理。内容涵盖从模式请求端口创建到状态切换规则定义的全流程,特别针对Ecu State Handling进行了深入解析,并附有状态切换流程图,帮助汽车电子工程师高效完成ECU状态管理配置。

weixin_28366475的博客 410

MANIFEST.MF文件详解

打开Java的JAR文件我们经常可以看到文件中包含着一个META-INF目录,这个目录下会有一些文件,其中必有一个MANIFEST.MF,这个文件描述了该Jar文件的很多信息,下面将详细介绍MANIFEST.MF文件的内容,先来看struts.jar中包含的MANIFEST.MF文件内容: Manifest-Version: 1.0 Created-By: Apache Ant1.5.1 Extension-Name: Struts Framework Specification-Title: St...

demon7552003的小本本 1514

实战避坑:泛微E9流程接口与单点登录(SSO)开发全解析(含自定义Action、Restful API与免密登录)

本文深入解析泛微E9流程接口与单点登录(SSO)开发中的关键技术与避坑指南,涵盖自定义Action开发、Restful API鉴权机制及跨系统单点登录实现。通过实战案例与代码示例,帮助开发者高效完成二次开发,解决系统集成中的数据孤岛问题,提升企业信息化建设效率。

weixin_42549451的博客 674

java读取jar包中的程序版本号

java程序打包后的jar如下图所示: 可以看到META-INF目录下的三处均可以读取到程序的版本号:程序版本号字段 即 Implementation-Version 2、build-info.properties 这个是依赖maven插件 git-commit-id-plugin,具体在我之前的博文都有详细讲述。这里就不再赘述~路径是maven/{基本package名}/{服务名},读取pom.xml或者pom.properties都可以。当然读取pom.properties相对简单,格式见下: 如

天草二十六 3486

S7-200 SMART PLC 数字量阀门控制功能块(FB)汇总

S7-200 SMART PLC功能块的各种写法可以查看专栏的其它文章,链接地址如下:S7-200 SMART PLC 子程序功能块(阀门控制)_RXXW_Dor的博客-优快云博客_plc控制阀门开关程序由于S7-200 SMARTPLC的子程序种种功能、容量限制,有时想实现多次调用的子程序可能并不是太容易,这篇博客还是给出一些推荐写法,供大家参看。

RXXW_Dor的博客 3999

减法平均优化器(SABO)算法详解:从数学原理到工程应用

减法平均优化器(SABO)是一种基于数学概念的新型元启发式优化算法,由Trojanovský和Dehghani于2023年提出。该算法通过v-减法运算和平均值计算实现搜索优化,核心创新是采用目标函数值差异符号引导搜索方向。SABO具有参数少、结构简单、收敛快等特点,在高维复杂问题中表现优异。算法通过种群平均值保持多样性,利用符号函数确保搜索方向改进,自然平衡探索与开发。MATLAB实现显示其计算复杂度为O(N²·D),与主流群体智能算法相当。SABO不依赖生物或物理隐喻,数学基础坚实,在工程优化和机器学习领

qq_42212808的博客 165

Maven打jar包时MANIFEST.MF文件的重要性,MANIFEST.MF文件详细介绍

打开Java的JAR文件我们经常可以看到文件中包含着一个META-INF目录,这个目录下会有一些文件,其中必有一个MANIFEST.MF,这个文件描述了该Jar文件的很多信息。个人理解,MANIFEST.MF文件是jar文件运行依赖的入口,maven打jar包时,MANIFEST.MF文件配...

chujia1956的博客 8281

2026星宸科技数字IC设计笔试带答案

摘要:本文包含四个计算机科学领域的编程与逻辑设计题目解析。第一部分通过C语言程序补充水仙花数判断代码,考查循环结构和函数设计;第二部分分析Verilog代码的D触发器电路,讨论时序约束与时钟频率影响;第三部分详细讲解静态时序分析中的建立/保持时间计算与违例判断;第四部分计算机体系结构题目涉及CPI、MIPS计算和性能加速比分析。最后还包含一个逻辑代数化简的示例,展示基本的布尔代数简化技巧。这些题目全面覆盖了编程基础、数字电路设计、时序分析和计算机性能评估等核心知识点。(149字)

Open 120

manifest java_JAR包中的MANIFEST.MF文件详解以及编写规范

参考百度百科的解释如下:MANIFEST.MF:这个 manifest 文件定义了与扩展和包相关的数据。单词“manifest”的意思是“显示”打开Java的JAR文件我们经常可以看到文件中包含着一个META-INF目录,这个目录下会有一些文件,其中必有一个MANIFEST.MF,这个文件描述了该Jar文件的很多信息,下面将详细介绍MANIFEST.MF文件的内容,先来看struts.jar中包含...

weixin_31880383的博客 1874

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

关于 jar包中MANIFEST.MF 写法

例如我们打包的jar为 Test.jarManifest-Version: 1.0 Main-Class: windows.VideoWindow Class-Path: lib\org.eclipse.swt_3.3.0.v3346.jar lib\org.eclipse.sw

Richard的专栏 1万+

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

MANIFEST.MF文件使用说明

JAR 文件支持广泛的功能,包括电子签名、版本控制、包封装等等。什么赋予 JAR 文件这种多样性?答案是 JAR 文件的 MANIFEST 文件。MANIFEST 是一个特殊的文件,可以包含有关打包在 JAR 文件中的文件的信息。通过调整 MANIFEST 包含的这些“元”信息,您可以使 JAR 文件具有各种用途。本课程将解释 MANIFEST 文件的内容,并向您展示如何处理它,包括以下基本功能的示例:1.了解默认 MANIFEST2.修改 MANIFEST 文件3.设置应用程序的入口点。

u011624157的专栏 5079

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

JAR包中的MANIFEST.MF文件详解以及编写规范

参考百度百科的解释如下: http://baike.baidu.com/item/MANIFEST.MF MANIFEST.MF:这个 manifest 文件定义了与扩展和包相关的数据。单词“manifest”的意思是“显示” 打开Java的JAR文件我们经常可以看到文件中包含着一个META-INF目录,这个目录下会有一些文件,其中必有一个MANIFEST.MF,这个文件描述了该J...

angou6476的博客 131

[JAVA]MANIFEST.MF文件错误相关:找不到主类的解决方法

MANIFEST.MF MANIFEST.MF:这个 manifest 文件定义了与扩展和包相关的数据。单词“manifest”的意思是“显示” 打开Java的JAR文件我们经常可以看到文件中包含着一个META-INF目录,这个目录下会有一些文件,其中必有一个MANIFEST.MF,这个文件描述了该Jar文件的很多信息,下面将详细介绍MANIFEST.MF文件的内容,先来看struts.jar...

wter26的专栏 6174

java中的JAR包

 使用JAR文件  JAR文件的全称是 Java Archive File,意思就是Java档案文件。通常JAR文件是一种压缩文件,与常见的ZIP压缩文件兼容,通常也被称为JAR包。JAR文件与ZIP文件的区别就是在JAR文件中默认包含了一个名为META-INF/MANIFEST.MF 的清单文件,这个清单文件是在生成JAR文件时由系统自动创建的。 当开发了一个应用程序后,这个应用程序包含了很...

底层码农 1万+

关于java通过MANIFEST.MF文件打包

今天做一个项目,决定使用MANIFEST.MF 进行打包 主要格式 Manifest-Version:[此处一个空格]版本 Main-Class:[此处一个空格]执行类全名 Class-Path:[此处一个空格]jar包路径,相对于打完包后的jar包 示例

zhou的专栏 5353

java 打包 MANIFEST.MF_打包文件 MANIFEST.MF 功能详解

最近研究了如何在java工程打包,期间遇到的一些问题进行总结,如打包成test.jar 文件Manifest-Version: 1.0 Main-Class: windows.VideoWindow Class-Path: lib\jetty-6.1.26.jar lib\aspectjweaver-1.6.12.jar上面为打包为jar中的包说明文件. 下面这个报错一直出现. could not...

weixin_31998661的博客 1368

java matifest.mf文件解析_MANIFEST.MF 文件内容完全详解(转)

打开Java的JAR文件我们经常可以看到文件中包含着一个META-INF目录,这个目录下会有一些文件,其中必有一个MANIFEST.MF,这个文件描述了该Jar文件的很多信息,下面将详细介绍MANIFEST.MF文件的内容,先来看struts.jar中包含的MANIFEST.MF文件内容:Manifest-Version: 1.0Created-By: Apache Ant1.5.1Exte...

weixin_35680955的博客 589

运行jar包时,找不到引用的依赖包的解决方法

我收藏的文章 运行jar包找不到依赖包的解决方法 运行jar应用程序引用其他jar包的四种方法 JAR包中的MANIFEST.MF文件详解以及编写规范 解决办法1: 将第三方jar包放到JRE的扩展类文件夹中(%JAVA_HOME%/jre/lib/ext), 解决方法2: 修改jar包的MANIFEST.MF文件 详细如下: 通过不断地试验,终于成功了! 1、写好自己的MANIFEST.MF文件,放到项目中 2、新建文件夹test位于D盘; 3、将用到的所有第三方...

ftm_csdn的博客 1万+

关于websphere发布jar包需修改MANIFEST.MF文件

MANIFEST.MF格式总结_陈灯的博客-优快云博客 【说明】 Java打包文件(jar文件)中通常会包含清单文件(META-INF/MANIFEST.MF),该文件可以包含主类以及加载类路径等信息。 该文件有着严格的格式要求,甚至一个空格都会引起错误。 【MANIFEST.MF格式说明】 1. 文件中的内容以键值对的形式出现,键值对之间采用"冒号+空格"进行分隔(注意:冒号后的空格必须有,否则格式有错误) 2. 文件每行最多72个字符,可以分多行写,但是在行的末尾必须加上空格符作为续行符(注意:末

weixin_37960427的博客 431
上一篇: exe4j把java代码,打包成jar文件以及转换为exe可执行文件
下一篇: The JVM found at JAVA_HOME is damaged.Please reinstall or define EXE4J_JAVA_HOME to point to an inst
shadow_zed
博客等级 码龄10年 6289粉丝 68原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值