`

jar

    博客分类:
  • Java
阅读更多

JAR 文件 ?

JAR 文件格式以流行的 ZIP 文件格式为基础,用于将许多个文件聚集为一个文件。与 ZIP 文件不同的是, JAR 文件不仅用于压缩和发布,而且还用于部署和封装库、组件和插件程序,并可被像编译器和 JVM 这样的工具直接使用。在 JAR 中包含特殊的文件,如 manifests 和部署描述符,用来指示工具如何处理特定的 JAR

 

jar 工具在默认情况下压缩文件。未压缩的 JAR 文件一般可以比压缩过的 JAR 文件更快地装载,因为在装载过程中要解压缩文件,但是未压缩的文件在网络上的下载时间可能更长。  

META-INF 目录

大多数 JAR 文件包含一个 META-INF 目录,它用于存储包和扩展的配置数据,如安全性和版本信息。 Java 2 平台识别并解释 META-INF 目录中的下述文件和目录,以便配置应用程序、扩展和类装载器:

  • MANIFEST.MF 这个 manifest 文件 定义了与扩展和包相关的数据。
  • INDEX.LIST 这个文件由 jar 工具的新选项 -i 生成,它包含在应用程序或者扩展中定义的包的位置信息。它是 JarIndex 实现的一部分,并由类装载器用于加速类装载过程。
  • xxx .SF 这是 JAR 文件的签名文件。占位符 xxx 标识了签名者。
  • xxx .DSA 与签名文件相关联的签名程序块文件,它存储了用于签名 JAR 文件的公共签名。

MANIFEST.MF 文件几个重要属性

Manifest-Version: 1.0

Main-Class: ui.JFrameMain

Class-Path: jtds-1.2.jar c3p0-0.9.1.2.jar esri_mo20.jar esri_mo20res.jar jsde83_sdk.jar

 

解释一下:

Manifest-Version mf 文件版本号,没什么,只是个版本标记

Main-Class 包含 main 函数的类,程序的入口

Class-Path 用到的一些包,这个很重要,也还好使,只要设置这个,就可以不用把第三方包在 OS 设置什么 classpath

 

要注意的地方:

要点 1 :每行的“ : ( 冒号 ) 用来分隔键值对,冒号后边一定要跟一个空格!

也就是说务必写为 :

Main-Class:( 空格 )YouClassName

Class-Path:( 空格 )Class1.Jar

要点 2 Class-Path 里边的内容用空格分隔而不是逗号或者分号

也就是说务必写成 :

Class-Path:( 空格 )Class1.jar( 空格 )Class2.jar( 空格 )Class3.Jar 切记

要点 3 : 有的文章说 MF 文件每行不能超过七十多的字符,不知是否属实,没试过,但如果在一行多了我们还是采用多行,这样修改起来会方便点,但要注意以下两点:

1. 每行的最后一个 jar 的名称后不容许有空格

    "    lib/b.jar" b.jar 后必须回车结束本行,不能有空格,一个都不能

2. 每行的开头必须有不少于 2 个空格

"    lib/b.jar" b.jar 前必须有不下两个空格  

Jar 工具命令  

jar {ctxu}[vfm0M] [jar- 文件 ] [manifest- 文件 ] [-C 目录 ] 文件名 ...

 

其中 {ctxu} jar 命令的子命令,每次 jar 命令只能包含 ctxu 中的一个,它们分别表示:

-c  创建新的 jar 文件包

-t  列出 jar 文件包的内容列表

-x  展开 jar 文件包的指定文件或者所有文件

-u  更新已存在的 jar 文件包 ( 添加文件到 jar 文件包中 )

 

[vfm0M] 中的选项可以任选,也可以不选,它们是 jar 命令的可选参数

-v  生成详细报告并打印到标准输出

-f  指定 jar 文件名,通常这个参数是必须的

-m  指定需要包含的 MANIFEST 清单文件

-0  只存储,不压缩,这样产生的 jar 文件包会比不用该参数产生的体积大,但速度更快

-M  不产生所有项的清单( MANIFEST 〕文件,此参数会忽略 -m 参数

 

[jar- 文件 ] 即需要生成、查看、更新或者解开的 jar 文件包,它是 -f 参数的附属参数

 

[manifest- 文件 ] MANIFEST 清单文件,它是 -m 参数的附属参数

 

[-C 目录 ] 表示转到指定目录下去执行这个 jar 命令的操作。它相当于先使用 cd 命令转该目录下再执行不带 -C 参数的 jar 命令,它只能在创建和更新 jar 文件包的时候可用。  

 

文件名 ... 指定一个文件 / 目录列表,这些文件 / 目录就是要添加到 jar 文件包中的文件 / 目录。如果指定了目录,那么 jar 命令打包的时候会自动把该目录中的所有文件和子目录打入包中。

 

下面举一些例子来说明 jar 命令的用法:

 

1) jar cvf test.jar test

该命令没有执行过程的显示,执行结果是在当前目录生成了 test.jar 文件。如果当前目录已经存在 test.jar ,那么该文件将被覆盖。

 

2) jar cvfM test.jar test

该命令与 1) 结果类似,但在生成的 test.jar 中没有包含 META-INF/MANIFEST 文件,打包过程的信息也略有差别

 

3) jar cvfm test.jar manifest.mf test

运行结果与 2) 相似,显示信息也相同,只是生成 jar 包中的 META-INF/MANIFEST 内容不同,是包含了 manifest.mf 的内容

 

4) jar tvf test.jar

test.jar 已经存在的情况下,可以查看 test.jar 中的内容

 

5) jar xvf test.jar

解开 test.jar 到当前目录,解压过程有详细信息显示

 

6) jar uvf test.jar manifest.mf

test.jar 中添加了文件 manifest.mf ,此使用 jar tf 来查看 test.jar 可以发现 test.jar 中比原来多了一个 manifest 。这里顺便提一下,如果使用 -m 参数并指定 manifest.mf 文件,那么 manifest.mf 是作为清单文件 MANIFEST 来使用的,它的内容会被添加到 MANIFEST 中;但是,如果作为一般文件添加到 jar 文件包中,它跟一般文件无异。

分享到:
评论

相关推荐

    jstl1.1.jar和standard1.1.jar

    (另外,实际操作的时候发现JSTL1.2.jar和JSTL1.1.jar这2个包放一起可以在tomcat5.5和tomcat6.0上跑,鉴于JSTL1.1.jar里面没有c.tld等文件,猜测JSTL1.1.jar里面只是放置了1.1的专用的类和信息)

    Jar包Jar包Jar包Jar包Jar包

    Jar包Jar包Jar包Jar包Jar包Jar包Jar包Jar包Jar包Jar包 Jar包Jar包Jar包Jar包Jar包Jar包Jar包Jar包Jar包Jar包 Jar包Jar包Jar包Jar包Jar包Jar包Jar包Jar包Jar包Jar包 Jar包Jar包Jar包Jar包Jar包Jar包Jar包Jar包Jar包...

    jstl-1.2.1 jar

    jstl-1.2.1,之前的版本需要在服务器中配置一下,而且它分成了两个jar(jstl.jar和standard.jar)还有一个tld文件,而1.2已经不用配置了,直接把javax.servlet.jsp.jstl-1.2.1.jar和javax.servlet.jsp.jstl-api-1.2.1...

    各种你需要的JAR包

    所有jar包集全,JAR包,JAR包,JAR包,JAR包,JAR包,JAR包,JAR包,JAR包,JAR包,JAR包,JAR包,JAR包,JAR包,JAR包,JAR包,JAR包,JAR包,JAR包,JAR包,JAR包,JAR包,JAR包,JAR包,JAR包,JAR包,JAR包,JAR...

    jarjar-1.4.jar

    jar包冲突,可以使用jarjar.jar修改jar包的名字,解决冲突问题。

    j2ee.jar架包

    j2ee.jar架包j2ee.jar架包j2ee.jar架包j2ee.jar架包j2ee.jar架包j2ee.jar架包j2ee.jar架包j2ee.jar架包j2ee.jar架包j2ee.jar架包j2ee.jar架包j2ee.jar架包j2ee.jar架包j2ee.jar架包j2ee.jar架包j2ee.jar架包j2ee.jar...

    jstl-1.2.jar免费下载

    jstl-1.2.jar下载jstl-1.2.jar下载jstl-1.2.jar下载jstl-1.2.jar下载jstl-1.2.jar下载jstl-1.2.jar下载jstl-1.2.jar下载jstl-1.2.jar下载jstl-1.2.jar下载jstl-1.2.jar下载jstl-1.2.jar下载jstl-1.2.jar下载jstl-1.2...

    spring3.1 官方全部jar包

    spring3.1官方所有的jar包 org.springframework.aop-3.1.RELEASE.jar org.springframework.asm-3.1.RELEASE.jar org.springframework.aspects-3.1.RELEASE.jar org.springframework.beans-3.1.RELEASE.jar org....

    msbase.jar,mssqlserver.jar,msutil.jar

    JDBC Driver for SQL Server: msbase.jar,mssqlserver.jar,msutil.jar

    smali-2.0.3.jar baksmali-2.0.3.jar

    java -jar baksmali-2.0.3.jar -x android.odex java -jar smali-2.0.3.jar out -o classes.dex /////////// android 合并apk和odex文件 前提:正确安装JDK和配置环境变量 需要这个apk所在的rom里面的一些jar...

    java操纵excel的jar包(jxl.jar包 源码)

    java操纵excel的jar包

    json所有的jar包下载

    json-lib-2.2.3-jdk15.jar commons-beanutils-1.7.0.jar commons-httpclient-3.1.jar commons-lang-2.3.jar commons-logging-1.1.1.jar commons-collections-3.2.1.jar ezmorph-1.0.3.jar 如果不关联这些包,则会...

    jetty相关的全部jar包

    jetty-security-9.4.8.v20171121.jar,jetty-io-9.4.8.v20171121.jar,jetty-continuation-9.4.8.v20171121.jar,jetty-client-9.4.8.v20171121.jar,jetty-jmx-9.4.8.v20171121.jar,jetty-plus-9.4.8.v20171121....

    javax.jar 包免费下载

    javax.jar javax.jar javax.jar javax.jar javax.jar javax.jar javax.jar javax.jar javax.jar javax.jar javax.jar javax.jar javax.jar javax.jar javax.jar javax.jar javax.jar javax.jar javax.jar javax.jar ...

    JAX-RS入门jar包集合

    使用到的外部jar包有(必须的部分,需要加到Web容器中) •neethi-3.0.2.jar •jsr311-api-1.1.1.jar •cxf-bundle-2.6.0.jar 使用到的外部jar包有(可选的部分,当且仅当作为一个独立的application运行时) ...

    CXF接口所有所需jar包

    CXF接口所有所需jar包 1.cxf-2.3.3.jar 2.geronimo-annotation_1.0_spec-1.1.1.jar 3.geronimo-jaxws_2.2_spec-1.0.jar 4.geronimo-stax-api_1.0_spec-1.0.1.jar 5.geronimo-ws-metadata_2.0_spec-1.1.3.jar 6...

    jar包反编译工具

    jar包反编译工具 很实用! 功能特点: 1、XJad是基于Jad核心的Java源程序反编译软件,内置Jad1.5.8e2; 2、可处理多个*.class文件,可以处理文件夹内的所有文件,甚至可以处理*.jar文件; 3、带有多页面文本编辑器,...

    使用json所要用到的jar包

    json-lib-2.2.3-jdk15.jar commons-beanutils-1.7.0.jar commons-httpclient-3.1.jar commons-lang-2.3.jar commons-logging-1.1.1.jar commons-collections-3.2.1.jar ezmorph-1.0.3.jar 如果不关联这些包...

    jar包jar包jar包jar包jar包

    jar包jar包jar包jar包jar包jar包jar包jar包jar包jar包jar包jar包jar包jar包jar包jar包jar包jar包jar包jar包jar包jar包

    IBM MQ7.5_jar包

    Java连接IBM WebSphere MQ 7处理队列信息所需jar包,从安装目录直接打的包。主要包括: /com.ibm.mq.commonservices.jar /com.ibm.mq.defaultconfig.jar /com.ibm.mq.fta.jar /com.ibm.mq.headers.jar /...

Global site tag (gtag.js) - Google Analytics