清单文件

✍ dations ◷ 2025-10-25 18:08:32 #清单文件

在计算机领域, 清单文件(Manifest files)通常是元数据文件,这些元数据通常是固定值,用于描述程序的相关信息。清单文件可以是一个文件,也可以是多个文件。

清单文件,描述了关于应用的必要信息。这些信息用于Android构建工具、Android系统、Google Play。

Docker中,镜像的清单数据并不是以文件的形式展示,而是通过命令行docker manifest方式在控制台展示。manifest包含的是镜像信息,如:层数、大小、摘要码。

在Java平台中, 清单文件(Manifest file)是JAR文件中包含的特殊文件。Manifest文件被用来定义扩展或文件打包相关数据,是一个元数据文件,它包含了不同部分中的名/值对(英语:Attribute–value_pair)数据。如果一个JAR文件被用来作为可执行文件,那么其中的Manifest文件需要指出该程序的主类文件。通常Manifest文件的文件名为MANIFEST.MF

通常Manifest文件都与Java文件相关,其他的情况比较少见。

JAR文件文件在规定位置包含META-INF/MANIFEST.MF 。在一个文件文件中,只能有一个Manifest文件,而且必须在规定的META-INF文件夹中。

由JDK1.0创建的Manifest文件内容如下:

Manifest-Version: 1.0

其中包含的所有条目均为名/值对。文件头的名和值由冒号分隔。默认的Manifest文件显示它遵从Manifest资源配置文件规范1.0。Manifest文件还可以包含该文件文件中所打包的其他文件的信息。具体Manifest文件中记录的文件信息由该JAR文件的预期使用对象决定。默认的Manifest文件并不包含其他文件的信息,因此只包含唯一一行关于该Manifest文件自身的数据。

默认Manifest文件可以根据JAR文件的用处而作相应修改。如果JAR文件仅仅是用作存档,那么MANIFEST.MF文件则只包含默认信息。然而,大多数JAR文件都不仅仅是用作压缩存档,相应的Manifest的文件也包含了特定的信息。下面列出了一些主要的特殊用法的Manifest文件头:

JAR应用程序: 如果JAR文件被用作可执行的应用程序,那么应用程序需要告诉Java虚拟机入口点位置。任意包含public static void main(String args)方法的类即为入口点。该信息由文件头Main-Class提供,基本格式如下:

Main-Class: classname

classname值可由应用程序的入口点代替。

可下载扩展: 可下载扩展文件是由其他JAR文件中的Manifest文件所提及的JAR文件。通常情况下,JAR文件可以包含一个Applet小应用程序,该JAR文件的Manifest文件则指向一系列的JAR文件作为可下载扩展来支持该小应用程序。扩展之间也可以使用相同方法来进行指向。可下载扩展信息是由小应用程序或另一扩展中的Manifest文件的Class-Path文件头提供的。通常可见的Class-Path文件头内容如下:

Class-Path: servlet.jar infobus.jar acme/beans.jar

在该文件头信息中,servlet.jar,infobus.jar以及acme/beans.jar中的类将作为可下载扩展为Applet小应用程序或Java应用程序服务。Class-Path中给出的超链接是该Applet小应用程序或Java应用程序的相对地址。

封装加封: JAR文件中的封装可以选择进行加封,即该封装中所定义的类必须被存档在相同的JAR文件中。封装加封可以用来确保类版本的连贯性或作为安全措施。要对封装进行加封,需要对该封装加入文件头Name,然后加入文件头Sealed,如下:

Name: myCompany/myPackage/Sealed: true

文件头Name的值为该封装的相对路径名。注意,该路径名由‘/’结束以区别于文件名。在文件头Name之后未采用空行隔开的文件头,一律作用于该Name文件头制定的文件或封装。在上述例子中,由于Sealed紧接在Name: myCompany/myPackage header之后且没有空行隔开,那么该Sealed文件头仅作用于myCompany/myPackage封装。该代码无法执行。

封装版本: 封装版本规范定义了一系列Manifest文件头来记录版本信息。每个封装都可以应用一系列Manifest文件头。版本文件头应当直接跟随在Name文件头。下面的例子展示了所有的版本文件头:

Name: java/util/Specification-Title: "Java Utility Classes" 
Specification-Version: "1.2"
Specification-Vendor: "Sun Microsystems, Inc.".
Implementation-Title: "java.util"
Implementation-Version: "build57"
Implementation-Vendor: "Sun Microsystems, Inc."

指定从属文件:

MANIFEST.MF文件可以用来指定应用程序运行所必须加载的所有类文件。

相关

  • 伦巴第伦巴第(意大利语:Lombardia,意大利语发音:)是一个位于阿尔卑斯山和波河的一个意大利北部大区。它与意大利的其它大区皮埃蒙特、艾米利亚-罗马涅、威尼托、特伦蒂诺-上阿迪杰以及
  • 三位一体核试三位一体(英语:Trinity),也有音译作托立尼提或特里尼泰,是人类史上首次核试验的代号,是曼哈顿计划的一部分。美国陆军在1945年7月16日于新墨西哥州索科罗县的托立尼提沙漠举行,这次
  • 怀特河怀特河国家森林 (英语:White River National Forest)是美国的一个国家森林,位于科罗拉多州的西北,怀特河从其北部穿过而得名,是游客数量量最大的美国国家森林,主要游客集中在其边界
  • 黄素影黄素影(1919年1月1日-2017年11月21日),中华人民共和国女演员,中国电影家协会会员。2003年以84岁高龄荣获华表奖影后。1919年黄素影生于一个小资产家庭,高中毕业后加入上海救亡演剧
  • 萨缪尔·摩尔斯萨缪尔·芬利·布里斯·摩尔斯(英语:Samuel Finley Breese Morse)(1791年4月27日-1872年4月2日),美国发明家,摩尔斯电码的创立者。摩尔斯生于麻省查尔斯镇,是美国“地理学之父”兼基
  • 护玄护玄(1984年6月2日-)是台湾的女性轻小说作家。代表作为《特殊传说》。另一笔名为“离玄”。
  • 纳拉特纳拉特(Narath),是印度喀拉拉邦Kannur县的一个城镇。总人口12553(2001年)。该地2001年总人口12553人,其中男性5986人,女性6567人;0—6岁人口1481人,其中男738人,女743人;识字率79.79%,其
  • 卢娜卢娜(Luna,又写作露娜或路娜)是罗马神话中的月亮女神。“Luna”在法语和意大利语中也有月亮或月神的意思。在希腊神话中她的对应者为塞勒涅。卢娜也常常和狄安娜或赫卡忒混淆在
  • 艾格妮丝·夏薇依艾格妮丝·夏薇依(法语:Agnès Jaoui,1964年10月19日-),生于安东尼_(上塞纳省),法国女演员、编剧、导演兼歌手。艾格妮丝.夏薇依出生于法国,突尼斯的犹太家庭,父母都是作家,中学时期开
  • 黄润乾黄润乾(1933年12月5日-2013年10月10日),男,籍贯湖南衡山,生于北京,中国天体物理学家,中国科学院国家天文台云南天文台研究员,中国科学院院士。1958年毕业于德国耶拿大学(当时译名席勒大学)。1999年当选为中国科学院院士。曾任中国天文学会副理事长、云南省科协常务理事。长期从事恒星物理研究。在双星非守恒演化、星风激波理论、转动双星演化理论和星风物质损失等问题上作出了重要贡献。发现双星有物质损失和角动量损失情况下的各种复杂因素,将双星非守恒演化奠定在严密的数理基础上与Weigert合作,最先提