java jar manifest_Java Jar Manifest

全屏

Manifest文件

JAR文件可以可选地在META-INF目录中包含名为MANIFEST.MF的Manifest文件。Manifest文件包含有关JAR文件及其条目的信息。Manifest文件可以包含有关JAR文件的CLASSPATH设置及其主条目类的信息。

主条目类是具有启动独立应用程序的main()方法的类,包的版本信息等。

manifest文件被分成由空白行分隔的部分。每个部分包含名称 - 值对。 一个新行分隔每个名称/值对。冒号分隔名称及其对应的值。

清单文件必须以新行结束。以下是样本清单文件:Manifest-Version: 1.0

Created-By: 1.8.0_20-ea-b05 (Oracle Corporation)

Main-Class: cn.sxt.Main

Profile:  compact1

上面的manifest文件有一个具有四个属性的部分:Manifest-Version

Created-By

Main-Class

Profile

Jar清单文件中的部分

manifest文件中有两种类型的部分:主部分和各个部分。

空行必须分隔任何两个部分。主部分中的条目适用于整个JAR文件。单个部分中的条目适用于特定条目。

单个部分中的属性覆盖主部分中的相同属性。单个条目以“Name”属性开头,其值是JAR文件中条目的名称,后面是该条目的其他属性。Manifest-Version: 1.0Created-By: 1.6.0  (Sun  Microsystems Inc.) Main-Class: com.yiibai.Main

Sealed: trueName: book/data/ Sealed: falseName: images/logo.bmp

Content-Type: image/bmpJava

上面的清单文件包含三个部分:一个主部分和两个单独部分。在两个部分之间有一个空白行。

第一个单独部分指示包装书/数据未被密封。 这个单独的section属性“Sealed:false”将覆盖主部分的属性“Sealed:true”。

第二个单独部分用于名为images/logo.bmp的条目。它表示条目的内容类型是bmp类型的图片。

Jar Manifest文件中的值

jar命令可以创建默认 Manifest 文件并将其添加到JAR文件。默认清单文件仅包含两个属性:Manifest-Version和Created-By。可以使用选项M告诉jar工具忽略默认Manifest文件。以下命令将创建一个test.jar文件,而不添加默认Manifest 文件:jar cMf test.jar  *

jar命令提供了自定义Manifest文件内容的选项。选项m指定具有Manifest文件内容的文件。

jar命令将从指定Manifest文件读取名称/值对,并将其添加到MANIFEST.MF文件。

假设有一个名为manifest.txt的文件,其中有一个属性条目。请确保在文件末尾添加新行。 文件内容如下:Main-Class: cn.sxt.Main

要通过将当前工作目录中的所有类文件包含在新的test.jar文件中,从manifest.txt文件中添加Main-Class属性值,请执行以下命令:jar cfm test.jar manifest.txt *.class

指定选项m时,还必须指定Manifest文件名。指定新JAR文件名和Manifest文件名的顺序必须与选项m和f的顺序匹配。

例如,可以通过以不同的顺序指定f和m选项来更改上述命令,如下所示:jar cmf manifest.txt test.jar  *.class

此命令将向test.jar文件添加具有以下内容的manifest文件:Manifest-Version: 1.0

Created-By: 1.8.0_20-ea (Oracle Corporation)

Main-Class: cn.sxt.Main

如果未在manifest文件中指定manifest文件和创建者属性,这工具将会自己添加它们。它默认的manifest版本为1.0。创建者默认为使用的JDK版本。

主类

以下代码显示如何使用java命令运行Java程序,并指定具有main()方法的类名,如下所示:java cn.sxt.Main

com.yiibai是包名称。可以使用-jar选项与java命令运行jar文件,如下所示:java -jar test.jar

当运行上述命令时,JVM将在test.jar文件中的MANIFEST.MF文件中查找Main-Class属性的值,并尝试运行该类。如果在test.jar文件中未包含Main-Class属性,则上述命令将生成错误。

还可以在manifest文件中添加Main-Class属性值,而无需创建自己的manifest文件。

在创建/更新jar文件时,使用选项e与jar工具。以下命令将在test.jar文件中的MANIFEST.MF文件中添加com.yiibai.Main作为Main-Class的值:jar cfe   test.jar cn.sxt.Main *.class

以下命令将使用选项u 将com.yiibai.Main用来更新添加到test.jar文件中MANIFEST.MF文件中Main-Class的值:jar ufe  test.jar cn.sxt.Main

类路径

可以在其manifest 文件中为JAR文件设置CLASSPATH。属性名称叫作类路径,必须在自定义清单文件中指定。 它是一个空格分隔的jar文件,zip文件和目录的列表。 manifest文件中的Class-Path属性看起来像 -Class-Path: Main.jar  file:/c:/book/  http://www.sxt.cn/tutorial.jar

上面的条目有三个CLASSPATH项目:一个JAR文件Main.jar,一个使用文件协议文件的目录:c:/book/和另一个使用HTTP协议的JAR文件http://www.yiibai.com/tutorial.jar。java -jar test.jar

当使用java命令使用-jar选项运行JAR文件时,将忽略JAR文件(在上述情况为test.jar文件)的 manifest文件之外的任何CLASSPATH设置。Class-Path属性的另一个用途是使用jar工具的选项i生成所有包的索引。

以下命令将为test.jar文件中清单文件的Class-Path属性中列出的所有JAR文件中的所有包生成索引:jar i test.jar

在JAR文件中封装包

在JAR文件中封装包意味着该包中声明的所有类必须存档在同一个JAR文件中。要在JAR文件中封装包,请包括两个属性:Name和Sealed。 Name属性的值是包的名称,Sealed属性的值为true。

manifest文件中的以下条目将封装名为com.yiibai的包。 程序包名称必须以正斜杠(/)结尾。Name: cn/sxt/ Sealed: true

默认情况下,JAR文件中的所有包都不会被封装。 如果想要密封JAR文件本身,则可以包含Sealed属性,如下所示:Sealed: true

封装JAR文件将会封装该JAR文件中的所有包。 但是,可以通过不单独密封包装来覆盖它。manifest文件中的以下条目将封装JAR文件中的所有包,除了book/tutorial/package之外:Sealed: trueName: book/tutorial/ Sealed: false

分享到:

0评论

14487a65ea137d8f9ac97cdce44a0324.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值