Java清单文件是一种用于描述Java应用程序的文件格式,它可以帮助开发人员更好地管理和部署应用程序。它是一个XML文件,其中包含有关应用程序的信息,例如所需的依赖项、权限要求和其他相关信息。
要创建一个Java清单文件,首先需要在根目录中创建一个名为“META-INF”的文件夹,然后在该文件夹中创建一个名为“MANIFEST.MF”的文本文件。在该文本文件中,可以使用特定格式来定义所有必要的信息。
Manifest-Version: 1.0 Main-Class: com.example.MyClass Class-Path: lib/commons-lang3-3.1.jar lib/log4j-1.2.17.jar
上面的代码片段是一个Java清单文件的例子,它包含了三行内容:Manifest-Version、Main-Class和Class-Path。Manifest-Version行声明了此版本的manifest格式版本号;Main-Class行声明了此应用程序的主要类;而Class-Path行声明了此应用程序所需要使用到的外部JAR包。
JAR文件可以可选地在META-INF目录中包含名为MANIFEST.MF的清单文件。
清单文件包含有关JAR文件及其条目的信息。
清单文件可以包含有关JAR文件的CLASSPATH设置及其主条目类的信息。
主条目类是具有启动独立应用程序的main()方法的类,包的版本信息等。
清单文件被分成由空白行分隔的部分。每个部分包含名称 - 值对。 一个新行分隔每个名称/值对。冒号分隔名称及其对应的值。
清单文件必须以新行结束。以下是样本清单文件:
Manifest-Version: 1.0 Created-By: 1.8.0_20-ea-b05 (Oracle Corporation) Main-Class: com..Main Profile: compact1
上面的清单文件有一个具有四个属性的部分:
清单文件中有两种类型的节:主节和各个节。
空行必须分隔任何两个部分。主节中的条目适用于整个JAR文件。单个部分中的条目适用于特定条目。
单个节中的属性覆盖主节中的相同属性。
单个条目以“Name”属性开头,其值是JAR文件中条目的名称,后面是该条目的其他属性。
Manifest-Version: 1.0 Created-By: 1.6.0 (Sun Microsystems Inc.) Main-Class: com..Main Sealed: true Name: book/data/ Sealed: false Name: images/logo.bmp Content-Type: image/bmp
上面的清单文件包含三个部分:一个主要部分和两个单独部分。
在两个部分之间有一个空白行。
第一个个别部分指示包装书/数据未被密封。这个单独的section属性“Sealed:false”将覆盖主要部分的属性“Sealed:true”。
第二个单独部分用于名为images / logo.bmp的条目。它表示条目的内容类型是bmp类型的映像。
jar命令可以创建默认清单文件并将其添加到JAR文件。默认清单文件仅包含两个属性:Manifest-Version和Created-By。
您可以使用选项 M
告诉jar工具忽略默认的清单文件。
以下命令将创建一个test.jar文件,而不添加默认清单文件:
jar cMf test.jar *
jar命令为您提供了自定义清单文件内容的选项。
选项m指定具有清单文件内容的文件。
jar命令将从指定的清单文件读取名称/值对,并将其添加到MANIFEST.MF文件。
假设你有一个名为manifest.txt的文件,其中有一个属性条目。请确保在文件末尾添加新行。文件内容如下:
Main-Class: com..Main
要通过将当前工作目录中的所有类文件包含在新的test.jar文件中,从manifest.txt文件中添加Main-Class属性值,请执行以下命令:
jar cfm test.jar manifest.txt *.class
指定选项m时,还必须指定清单文件名。您指定新的JAR文件名和清单文件名的顺序必须与选项m和f的顺序匹配。
例如,您可以通过以不同的顺序指定f和m选项来更改上述命令,如下所示:
jar cmf manifest.txt test.jar *.class
此命令将向test.jar文件添加具有以下内容的清单文件:
Manifest-Version: 1.0 Created-By: 1.8.0_20-ea (Oracle Corporation) Main-Class: com..Main
如果未在清单文件中指定清单文件和创建者属性,该工具将添加它们。它默认的清单版本为1.0。创建者默认为您使用的JDK版本。
以下代码显示如何使用java命令运行Java程序,并指定具有main()方法的类名,如下所示
java com..Main
com.是包名称。
我们可以使用-jar选项与java命令运行jar文件,如下所示:
java -jar test.jar
当您运行上述命令时,JVM将在test.jar文件中的MANIFEST.MF文件中查找Main-Class属性的值,并尝试运行该类。
如果您在test.jar文件中未包含Main-Class属性,则上述命令将生成错误。
我们还可以在清单文件中添加Main-Class属性值,而无需创建我们自己的清单文件。
在创建/更新jar文件时,使用选项e与jar工具。
以下命令将在test.jar文件中的MANIFEST.MF文件中添加com..Main作为Main-Class的值:
jar cfe test.jar com..Main *.class
以下命令将使用选项u for update将com..Main作为现有test.jar文件中MANIFEST.MF文件中Main-Class的值添加:
jar ufe test.jar com..Main
您可以在其清单文件中为JAR文件设置CLASSPATH。属性名称称为“类路径”,您必须在自定义清单文件中指定。它是一个空格分隔的jar文件,zip文件和目录的列表。清单文件中的Class-Path属性看起来像
Class-Path: Main.jar file:/c:/book/ //www..cn/tutorial.jar
上面的条目有三个CLASSPATH项目:一个JAR文件Main.jar,一个使用文件协议文件的目录:/ c:/ book /和另一个使用HTTP协议的JAR文件//www..cn/tutorial.jar。
目录名称必须以正斜杠结尾。假设此类路径设置包含在test.jar文件的清单文件中。当使用以下java命令运行test.jar文件时,此CLASSPATH将用于搜索和加载类。
java -jar test.jar
当使用java命令使用-jar选项运行JAR文件时,将忽略JAR文件(在上述情况下为test.jar文件)的清单文件之外的任何CLASSPATH设置。
Class-Path属性的另一个用途是使用jar工具的选项i生成所有包的索引。
以下命令将为test.jar文件中清单文件的Class-Path属性中列出的所有JAR文件中的所有包生成索引:
jar i test.jar
在JAR文件中封装包意味着该包中声明的所有类必须存档在同一JAR文件中。
要在JAR文件中封装包,请包括两个属性:Name和Sealed。 Name属性的值是包的名称,Sealed属性的值为true。
清单文件中的以下条目将封装名为com.java2s的包。程序包名称必须以正斜杠(/)结尾。
Name: com// Sealed: true
默认情况下,JAR文件中的所有包都不会被封装。如果您想要密封JAR文件本身,则可以包含密封归因,如下所示:
Sealed: true
封装JAR文件将会封装该JAR文件中的所有包。但是,您可以通过不单独密封包装来覆盖它。
清单文件中的以下条目将封装JAR文件中的所有包,除了book/tutorial/package之外:
Sealed: true Name: book/tutorial/ Sealed: false
Java IO教程 - Java缓冲输入流BufferedInputStream通过缓冲数据向输入流添加功能。它维护一个内部缓冲区以存储从底层输入流读取...
JavaFX教程 -JavaFX分页分页控件用于浏览多个页面。 我们典型地使用对网页的分页控制,例如博客。 在博客页面的底部,我们可以看...
Java脚本教程 -Java脚本NashornNashorn是JVM上的ECMAScript 5.1规范的运行时实现。Nashorn是100%符合ECMAScript 5.1。使用Nasho...
Java脚本教程 - Java脚本语言使用包全局对象Nashorn将所有Java包都定义为名为 Packages 的全局变量的属性。 例如, java.lang 和...