码迷,mamicode.com
首页 > 编程语言 > 详细

Java Jar :Manifest

时间:2015-07-11 16:20:36      阅读:134      评论:0      收藏:0      [点我收藏+]

标签:

 

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

 

Java Jar :Manifest

标签:

原文地址:http://www.cnblogs.com/f1194361820/p/4638778.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!