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

时间: 2024-07-29 06:46:12

Java Jar :Manifest的相关文章

Java 可执行jar的manifest编写

Eclipse:形式, 选中项目右键 命令行形式: 1.编写Java类 2.命令行指定到项目/src文件夹,编译 3.编写manifest文件 4.目录重新定位到bin/classes编译文件目录下, 执行打包命令 Jar /? 看详细说明. 命令行执行 java -jar xxx.jar时 , 通过-cp或者-classpath指定lib文件夹都无效, 需要这样: java -Djava.ext.dirs=./lib/ -jar xxxx.jar --------------------- 本

java jar打包命令使用

用法:jar {ctxu}[vfm0Mi] [jar-文件] [manifest-文件] [-C 目录] 文件名 ... 选项: -c 创建新的存档 -t 列出存档内容的列表 -x 展开存档中的命名的(或所有的]文件 -u 更新已存在的存档 -v 生成详细输出到标准输出上 -f 指定存档文件名 -m 包含来自标明文件的标明信息 -0 只存储方式:未用zip压缩格式 -M 不产生所有项的清单(manifest]文件 -i 为指定的jar文件产生索引信息 -C 改变到指定的目录,并且包含下列文件:

用JSmooth制作java jar文件的可运行exe文件教程【图文】

这是我之前在个人博客3yj上面写的一篇文章,如今转载过来,原文地址 (这不是广告哦) 几年前,刚接触java的是,就想用一些方法把自己的劳动果实保护起来,曾经也用过非常多这种工具,有一个特别好用,今天写篇文章跟大家分享. 今天要用到的工具有 JSmooth 0.9.9-7 汉化版,能够到本站下载:JSmooth 0.9.9-7 汉化版 首先要把你的程序打包成双击能够运行的包,详细的方法我就不多说了,网上非常多的,主要命令是:jar cvfm test.jar *.* -C  之类的 主要是确保其

java错误:Unsupported major.minor version 51.0

在搭框架过程中,遇到了问题:javax.servlet.ApplicationContext Unsupported major.minor version 51.0. 解决方法: 将下面依赖 <dependency>   <groupId>javax</groupId>   <artifactId>javaee-api</artifactId>   <version>7.0</version> </dependen

Java jar命令 常见用法

一.jar命令作用: 进行打包 -- 把多个文件打包成一个压缩包 -- 这个压缩包和Winzip的压缩格式是一样的. 区别在于jar压缩的文件默认多一个META-INF的文件夹,该文件夹下包含一个Manifest.mf(清单文件)的文件 通常来说jar命令得到的压缩包有三种(压缩格式完全一样,只是后缀名不同而已): A.*.jar - 它里面包含N个class文件. B.*.war (web) - 它是一个web应用打包生成的. C.*.ear(Enterprise) -它是一个企业应用打包生成

使用java -jar运行jar包

使用java -jar运行jar包 摘要 其实不难,网上搜了不少,但是讲不全,或者讲得不少,有的细节却漏掉了, 在此,我想将详细点 java -jar 1.其实命令比较简单:进入相应的目录后,执行java -jar XXX.jar即可! 2.但是,为什么通过Maven打包或者Eclipse export出来的jar不能运行呢?原因很简单,没指定执行哪个类的main方法,如何指定?配置文件,项目文件夹下有一个META-INF文件夹,META-INF文件夹下有一个MANIFEST.MF文件,只要更改

java jar bat 运行

1.    添加config.properties配制文件 2.    读取配制文件 in = new FileInputStream(System.getProperty("user.dir")+"\\lib\\config.properties"); prop.load(in); 3.    导出代码为jar 4.    添加依赖的jar包到MANIFEST.MF,jar放到同目录下 Manifest-Version: 1.0 ??Class-Path: dom

Android系统执行Java jar程序 -- dalvik运行dex Java工程

本文仅针对纯java工程执行进行诠释,一般在PC平台作为jar包形式存在,在Android平台则以dex包形式存在. Java属于高级程序语言,Java程序需要运行在特定的虚拟机中,虚拟机将Java字节码转换成对应的机器指令进行执行.不同平台具有不同的虚拟机对应各自的机器指令.PC端一般使用JVM虚拟机,Android端使用dalvik虚拟机. 需要配置环境: Java JDK开发环境 idea开发工具 Android SDK开发环境 Android build-tools 环境变量(随意指定一

JAVA jar命令(一)-jar打包class文件

jar包本质上是将所有class文件.资源文件压缩打成一个包(也可以选择不压缩),可选择在jar包中生成META-INF/MANIFEST.MF文件,MANIFEST.MF是清单文件,里面可以记录主类.classpath等信息,供虚拟机使用.接下来的一段时间里,我们将以以下路径学习jar命令和清单文件的相关知识 jar打包class文件    带包class文件jar打包    清单文件的使用 在这篇文章里我们将使用简单的java程序来熟悉jar命令的使用,因为是出于熟练使用jar的目的,下面的