标签:
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
先来看看mysql-jdbc.jar中的MANIFEST.MF文件:
Manifest-Version: 1.0 Ant-Version: Apache Ant 1.8.2 Created-By: 1.5.0_22-b03 (Sun Microsystems Inc.) Built-By: pb2user Bundle-Vendor: Oracle Corporation Bundle-Classpath: . Bundle-Version: 5.1.31 Bundle-Name: Oracle Corporation‘ JDBC Driver for MySQL Bundle-ManifestVersion: 2 Bundle-SymbolicName: com.mysql.jdbc Export-Package: com.mysql.jdbc;version="5.1.31";uses:="com.mysql.jdbc. log,javax.naming,javax.net.ssl,javax.xml.transform,org.xml.sax",com.m ysql.jdbc.jdbc2.optional;version="5.1.31";uses:="com.mysql.jdbc,com.m ysql.jdbc.log,javax.naming,javax.sql,javax.transaction.xa",com.mysql. jdbc.log;version="5.1.31",com.mysql.jdbc.profiler;version="5.1.31";us es:="com.mysql.jdbc",com.mysql.jdbc.util;version="5.1.31";uses:="com. mysql.jdbc.log",com.mysql.jdbc.exceptions;version="5.1.31",com.mysql. jdbc.exceptions.jdbc4;version="5.1.31";uses:="com.mysql.jdbc",com.mys ql.jdbc.interceptors;version="5.1.31";uses:="com.mysql.jdbc",com.mysq l.jdbc.integration.c3p0;version="5.1.31",com.mysql.jdbc.integration.j boss;version="5.1.31",com.mysql.jdbc.configs;version="5.1.31",org.gjt .mm.mysql;version="5.1.31" Import-Package: javax.net,javax.net.ssl;version="[1.0.1, 2.0.0)";resol ution:=optional,javax.xml.parsers, javax.xml.stream,javax.xml.transfo rm,javax.xml.transform.dom,javax.xml.transform.sax,javax.xml.transfor m.stax,javax.xml.transform.stream,org.w3c.dom,org.xml.sax,org.xml.sax .helpers;resolution:=optional,javax.naming,javax.naming.spi,javax.sql ,javax.transaction.xa;version="[1.0.1, 2.0.0)";resolution:=optional,c om.mchange.v2.c3p0;version="[0.9.1.2, 1.0.0)";resolution:=optional,or g.jboss.resource.adapter.jdbc;resolution:=optional,org.jboss.resource .adapter.jdbc.vendor;resolution:=optional Name: common Specification-Title: JDBC Specification-Version: 4.0 Specification-Vendor: Oracle Corporation Implementation-Title: MySQL Connector Java Implementation-Version: 5.1.31 Implementation-Vendor-Id: com.mysql Implementation-Vendor: Oracle
上面文件中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.0 Ant-Version: Apache Ant 1.9.4 Created-By: 1.5.0_22-b03 (Sun Microsystems Inc.) X-Compile-Source-JDK: 1.5 X-Compile-Target-JDK: 1.5 Name: javax/servlet/ Specification-Title: Java API for Servlets Specification-Version: 2.5 Specification-Vendor: Sun Microsystems, Inc. Implementation-Title: javax.servlet Implementation-Version: 2.5.MR2 Implementation-Vendor: Apache Software Foundation
意思就是:由ASF实现的servlet-api.jar是对java标准中的Servlets的实现。
另外,还有一个主要的属性Sealed:这个表示jar文件中的pacakage是否是密封的。
下面是两个清单文件:
清单一:整个jar是密封的。
Manifest-Version: 1.0 Sealed: true
清单二:指定的package是密封的:
Manifest-Version: 1.0 Name: com/fjn/java/util/jar/ Sealed: true
Jar包中,只有com/fjn/java/util/jar包是密封的。
清单三:
Manifest-Version: 1.0 Sealed: true Name: com/fjn/java/util/jar/ Sealed: false
整个jar包中,只有com/fjn/java/util/jar包不是密封的,其余的都是密封的。
标签:
原文地址:http://www.cnblogs.com/f1194361820/p/4638778.html