你的位置:首页 > Java教程

[Java教程]Java Jar :Manifest


 

Jar (Java Archive File, java归档文件),它其实也是一个zip文件。它包括了一个可选的META-INF目录。可以使用命令行中的jar命令来生成一个jar文件,也可以使用java.util.jar API来生成一个归档文件。

Jar文件中META-INF目录的作用:应用配置、扩展、类加载器、提供服务。在这个目录下,主要有下列几个文件(或者目录):

 

MANIFEST.MF

是一个清单文件,定义了扩展和与包相关的信息

INDEX.LIST

它是JarIndex实现的一部分,类加载器使用它可以提高加载速度

x.SF

签名文件

x.DSA

数字签名

service/

存放的是service provider配置文件

 

例如:

1)mysql-jdbc.jar

 

 

2)servlet-api.jar

 

 

3)activemq-all.jar

 

 

 

 

 

MANIFEST 中的主要属性

 

先来看看mysql-jdbc.jar中的MANIFEST.MF文件:

Manifest-Version: 1.0Ant-Version: Apache Ant 1.8.2Created-By: 1.5.0_22-b03 (Sun Microsystems Inc.)Built-By: pb2userBundle-Vendor: Oracle CorporationBundle-Classpath: .Bundle-Version: 5.1.31Bundle-Name: Oracle Corporation' JDBC Driver for MySQLBundle-ManifestVersion: 2Bundle-SymbolicName: com.mysql.jdbcExport-Package: com.mysql.jdbc;version="5.1.31";uses:="com.mysql.jdbc. log,javax.naming,javax.net.ssl,javax.

 上面文件中Bundle-*是OSGi的内容,这里不作说明。

 

Manifest-Version: 是清单文件的版本。不是jar包的版本。

Created-By: jar包创建者。

Main-Class:jar包中的主类。是应用程序的入口,这个属性只在jar作为一个独立的java 应用时使用。

 

Specification-* 代表Java标准中的说明信息。

Implementation-* 代表该Jar包是某个Java标准的实现。

 

Mysql-jdbc.jar中的信息就可以理解为:MySql-jdbc-5.1.31.jar中是JDBC 4.0标准的实现。

 

同理:servlet.jar中的MANIFEST.MF如下:

Manifest-Version: 1.0Ant-Version: Apache Ant 1.9.4Created-By: 1.5.0_22-b03 (Sun Microsystems Inc.)X-Compile-Source-JDK: 1.5X-Compile-Target-JDK: 1.5Name: javax/servlet/Specification-Title: Java API for ServletsSpecification-Version: 2.5Specification-Vendor: Sun Microsystems, Inc.Implementation-Title: javax.servletImplementation-Version: 2.5.MR2Implementation-Vendor: Apache Software Foundation

意思就是:由ASF实现的servlet-api.jar是对java标准中的Servlets的实现。 

  

另外,还有一个主要的属性Sealed:这个表示jar文件中的pacakage是否是密封的。

 

下面是两个清单文件:

清单一:整个jar是密封的。

Manifest-Version: 1.0Sealed: true

 

清单二:指定的package是密封的: 

Manifest-Version: 1.0Name: com/fjn/java/util/jar/Sealed: true

 Jar包中,只有com/fjn/java/util/jar包是密封的。

 

清单三:

Manifest-Version: 1.0Sealed: trueName: com/fjn/java/util/jar/Sealed: false

 整个jar包中,只有com/fjn/java/util/jar包不是密封的,其余的都是密封的。