java jar manifest_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

%E5%A4%96%E9%93%BE%E7%BD%91%E5%9D%80%E5%B7%B2%E5%B1%8F%E8%94%BD

2)servlet-api.jar

%E5%A4%96%E9%93%BE%E7%BD%91%E5%9D%80%E5%B7%B2%E5%B1%8F%E8%94%BD

3)activemq-all.jar

%E5%A4%96%E9%93%BE%E7%BD%91%E5%9D%80%E5%B7%B2%E5%B1%8F%E8%94%BD

MANIFEST 中的主要属性

先来看看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,.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: ,.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包不是密封的,其余的都是密封的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值