在Java中使用MANIFEST.MF文件


Answers:


87

以下是用Java开发工具包1.0版创建的JAR文件中的清单文件的内容。

Manifest-Version: 1.0

所有条目都是“名称/值”对。标题名称与其值之间用冒号分隔。默认清单显示它符合清单规范的1.0版。清单还可以包含有关归档文​​件中打包的其他文件的信息。清单中确切记录的文件信息将取决于JAR文件的预期用途。默认清单文件不假设应该记录有关其他文件的信息,因此其单行仅包含有关其自身的数据。专用清单头

根据JAR文件的预期角色,可能必须修改默认清单。如果仅出于存档目的而创建JAR文件,则MANIFEST.MF文件没有任何作用。JAR文件的大多数用途不只是简单的存档和压缩,而且还要求特殊信息包含在清单文件中。下面总结了一些特殊目的JAR文件功能所需的标头的简要说明

捆绑为JAR文件的应用程序如果应用程序捆绑在JAR文件中,则需要告知Java虚拟机该应用程序的入口点是什么。入口点是具有公共静态void main(String [] args)方法的任何类。此信息在Main-Class标头中提供,其格式如下:

Main-Class: classname

值classname将替换为应用程序的入口点。

下载扩展:下载扩展是其他JAR文件的清单文件引用的JAR文件。在典型情况下,小应用程序将捆绑在一个JAR文件中,该JAR文件的清单引用一个JAR文件(或几个JAR文件),该文件将作为该小应用程序的扩展名。扩展可以以相同的方式相互引用。下载扩展是在applet,应用程序或其他扩展的清单文件中的Class-Path标头字段中指定的。Class-Path标头可能看起来像这样,例如:

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

使用此标头,文件servlet.jar,infobus.jar和acme / beans.jar中的类将用作applet或应用程序的扩展。Class-Path标头中的URL是相对于applet或应用程序的JAR文件的URL给出的。

程序包密封:可以选择密封JAR文件中的程序包,这意味着必须将该程序包中定义的所有类归档在同一JAR文件中。可以对软件包进行密封,以确保软件中各类之间的版本一致性,或者作为安全措施。要密封包装,需要为包装添加一个Name标头,然后添加一个Sealed标头,类似于:

Name: myCompany/myPackage/
Sealed: true

Name标头的值是程序包的相对路径名。请注意,它以“ /”结尾以将其与文件名区分开。名称标头之后的所有标头(中间无空白行)适用于名称标头中指定的文件或包。在上面的示例中,由于Sealed标头出现在Name:myCompany / myPackage标头之后,之间没有空行,因此Sealed标头将解释为(仅)应用于包myCompany / myPackage。

程序包版本控制:程序包版本控制规范定义了几个清单标头来保存版本信息。可以将一组这样的头分配给每个包。版本标头应直接出现在包的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."

35
请不要复制他人的作品。您应该将链接添加到网页。docs.oracle.com/javase/tutorial/deployment/jar/sealman.html
Vash

57
它不是副本,而是摘要,共5页。
Frank

65
您可以调用此摘要。句子被复制,没有任何其他结论或要点。我认为您应该尊重某人的工作,并添加链接和引号。
DamianLeszczyński-Vash 2012年

19

Manifest.MF包含有关JAR文件中包含的文件的信息。

每当创建一个JAR文件时,都会在META-INF文件夹内创建一个默认manifest.mf文件,其中包含如下默认条目:

Manifest-Version: 1.0
Created-By: 1.7.0_06 (Oracle Corporation)

这些是“ header:value”对条目。第一个指定清单版本,第二个指定用于创建JAR文件的JDK版本。

Main-Class标头: 当使用JAR文件将应用程序捆绑在包中时,我们需要指定服务于应用程序入口点的类。我们使用清单文件的“ Main-Class”标头提供此信息,

主类:{完全合格的类名}

这里的“ Main-Class”值是具有main方法的类。指定该条目后,我们可以执行JAR文件来运行该应用程序。

类路径头: 大多数时候,我们需要从应用程序的JAR文件中打包的类访问其他JAR文件。这可以通过使用“ Class-Path”标头在清单文件中提供其完全限定的路径来完成,

类路径:{jar1-name jar2-name directory-name / jar3-name}

此标头可用于在同一本地网络上而不是在当前JAR内部指定外部JAR文件。

与程序包版本相关的标头: 当JAR文件用于程序包版本控制时,将按照Java语言规范的指定使用以下标头:

Headers in a manifest
Header                  | Definition
-------------------------------------------------------------------
Name                    | The name of the specification.
Specification-Title     | The title of the specification.
Specification-Version   | The version of the specification.
Specification-Vendor    | The vendor of the specification.
Implementation-Title    | The title of the implementation.
Implementation-Version  | The build number of the implementation.
Implementation-Vendor   | The vendor of the implementation.

包装密封相关的接头:

我们还可以指定是否应密封JAR文件中的任何特定程序包,这意味着必须将该程序包中定义的所有类归档在同一JAR文件中。可以借助“密封”标题来指定,

名称:{package / some-package /}密封的:true

在此,程序包名称必须以“ /”结尾。

使用清单文件增强安全性:

我们可以使用清单文件条目来确保Web应用程序或其包含不同属性的小程序的安全性,这些属性具有“权限”,“ Codebae”,“应用程序名称”,“仅受信任”等属性。

META-INF文件夹:

清单文件所在的文件夹。此外,它可以包含更多文件,其中包含有关应用程序的元数据。例如,在EJB模块JAR文件中,此文件夹包含EJB模块的EJB部署描述符以及JAR的清单文件。而且,它包含xml文件,该文件包含抽象EJB引用到将在其上运行的应用程序服务器的具体容器资源的映射。

参考:https :
//docs.oracle.com/javase/tutorial/deployment/jar/manifestindex.html

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.