`

Jar文件及MANIFEST.MF 文件入门

阅读更多

 

前言
     在看Btrace相关源代码的时,才认识到MANIFEST.MF是有很大用途的,以前对jar文件没多大了解,现在有空也整理下相关的资料。
 
Jar文件简介    
     Jar文件的本质是zip 文件,其中包含了META-INFO文件夹。Jar文件可以用jar工具或者java.util.jar API 来创建。Jar的文件名没有任何限制。
     Jar文件不单仅仅用来压缩class文件或者资源文件,还可以用来限制或者扩展应用程序。如果jar文件中含有META-INFO文件夹,它常常用来存储包或者配置文件,包括安全、版本、扩展、组件。
     Java2平台能够识别并解析META-INFO 文件夹下的下面文件,以便于配置应用程序、扩展和类装载器: 
MANIEFEST.MF:用来定义扩展和包相关的数据。
INDEX.LIST:这个文件由jar工具的选项 -i 生成的,它包含在应用程序或者扩展中定义的包的位置信息。它是JarIndex实现的一部分,并由类装载器用于加速类装载的过程。
x.SF:jar的签名文件。x表示文件名称
x.DSA:签名块文件,和签名文件关联,文件名和签名文件一样。该文件主要用于储存类似数字签名文件。
services/:储存所有服务提供者的配置文件。
     配置文件时由键值对组成的(name: value),遵循RFC822标准。二进制的数据要求是base64的。如果出现两个相同的键,则最后一个才能被识别。
 
常见的MANIFEST.MF 键值对
Manifest-Version: manifest的版本
Created-By: java 实现版本,一般由jar工具生成。
Class-Path : 扩展包的路径,主要为绝对路径或者相对路径,当指定该参数时,可以不设置classpath也能找到该扩展包
Main-Class : main方法类 
 
安全相关
Sealed : 指定jar是否封闭,如果为true,则不能jar包中的类不能访问其他包的类。可以指定特定的包
 
例如:
Manifest-Version: 1.0
Created-By: 1.2 (Sun Microsystems Inc.)
Sealed: true 
Name: foo/bar/
Sealed: false
这样指的是除了foo.bar包以外的类,都被封闭。
 
agent相关
Premain-Class : 如果 JVM 启动时指定了代理,那么此属性指定代理类,即包含 premain 方法的类。如果 JVM 启动时指定了代理,那么此属性是必需的。如果该属性不存在,那么 JVM 将中止。注:此属性是类名,不是文件名或路径。 
Agent-Class : 如果实现支持 VM 启动之后某一时刻启动代理的机制,那么此属性指定代理类。 即包含 agentmain 方法的类。 此属性是必需的,如果不存在,代理将无法启动。 注:这是类名,而不是文件名或路径。 
Boot-Class-Path:  由引导类加载器搜索的路径列表。路径表示目录或库(在许多平台上通常作为 JAR 或 zip 库被引用)。查找类的特定于平台的机制失败后,引导类加载器会搜索这些路径。按列出的顺序搜索路径。列表中的路径由一个或多个空格分开。路径使用分层 URI 的路径组件语法。如果该路径以斜杠字符(“/”)开头,则为绝对路径,否则为相对路径。相对路径根据代理 JAR 文件的绝对路径解析。忽略格式不正确的路径和不存在的路径。如果代理是在 VM 启动之后某一时刻启动的,则忽略不表示 JAR 文件的路径。此属性是可选的。 
Can-Redefine-Classes : 布尔值(true 或 false,与大小写无关)。是否能重定义此代理所需的类。true 以外的值均被视为 false。此属性是可选的,默认值为 false。 
Can-Retransform-Classes: 布尔值(true 或 false,与大小写无关)。是否能重转换此代理所需的类。true 以外的值均被视为 false。此属性是可选的,默认值为 false。 
Can-Set-Native-Method-Prefix: 布尔值(true 或 false,与大小写无关)。是否能设置此代理所需的本机方法前缀。true 以外的值均被视为 false。此属性是可选的,默认值为 false。  
 
     代理 JAR 文件在清单中可以同时出现 Premain-Class 和 Agent-Class 属性。如果代理是使用 -javaagent 选项在命令行上启动的,那么 Premain-Class 属性指定代理类的名称,Agent-Class 属性将被忽略。类似地,如果代理是在 VM 启动后某一时刻启动的,那么 Agent-Class 属性指定代理类的名称(Premain-Class 属性的值将被忽略)。 
 
参考文档:
具体代理jar文档可参考:http://docs.oracle.com/javase/6/docs/api/index.html (或者Java API文档java.lang.instrument包说明)
关于签名和services,可以参考jar 规范:http://docs.oracle.com/javase/1.4.2/docs/guide/jar/jar.html
分享到:
评论

相关推荐

    Java入门-生成可执行jar文件的教程

    - 这条命令表示创建一个名为`cal.jar`的JAR文件,其中包含`manifest.mf`中指定的信息,并且将当前目录下的所有`.class`文件加入到JAR文件中。 6. **其他高级用法**: - 如果需要将多个目录下的文件打包到一个JAR...

    fatjar_0.0.27

    4. 替换或保留MANIFEST.MF:fatjar允许用户自定义或保留原有的MANIFEST.MF文件,以设定类加载器、版本信息等。 5. 支持ANT脚本:fatjar插件还提供了与ANT构建工具的集成,使得在ANT脚本中调用打包过程变得简单。 ...

    jar包快速部署,直接运行的项目源码

    JAR文件中的MANIFEST.MF文件是重要的元数据,它定义了主类(Main-Class),这是运行jar文件时执行的入口点。例如,`Main-Class: com.example.App`表示应用的启动类。 4. **运行JAR文件** 可以使用`java -jar jar_...

    maven 3 jar 运行文件打包

    如果使用了`addClasspath`和`classpathPrefix`,那么Maven会在JAR内部生成一个MANIFEST.MF文件,指示JVM如何找到和加载依赖库。 6. **可执行JAR的注意事项**:确保所有的依赖库都已被正确包含,如果使用“fat”JAR...

    J2EE JNDI配置原理详解 JBOSS安装配置 Maven入门 Ant使用入门

    1.12 详解MANIFEST.MF文件 1.13 Maven入门--概念与实例 1.14 Subversion 1.15 jar war ear区别 1.16 如何在Eclipse中调试JBoss应用 1.17 JBoss 5.0 安装与配置详解 1.18 JBOSS安装配置 1.19 Oracle,MySql,...

    Spring OSGi 入门.pdf

    - **OSGi标准**:需要支持OSGi R4标准,并且在`MANIFEST.MF`文件中声明`Bundle-ManifestVersion: 2`。 - **开发环境搭建**:例如使用Eclipse 3.2进行开发时,需要将Spring-DM的相关`.jar`文件复制到Eclipse的`...

    konpflerfish konpflerfish tutorial

    使用文本编辑器或 IDE 创建一个名为 manifest.mf 的文件,并添加以下内容作为起点: ```plaintext Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: MyFirstBundle Bundle-SymbolicName: ...

    Castor入门实例,含完整jar包

    1. `META-INF`:这是Java中的标准目录,通常包含应用的元数据,如服务提供者接口(SPI)配置、MANIFEST.MF文件等。在Castor中,可能包含有关绑定文件和类映射的信息。 2. `javax`:这个目录可能包含了与Java标准库...

    java7hashmap源码-spring-boot:弹簧靴

    java7 hashmap源码 spring-boot 1.总览 ...MANIFEST.MF org.springframework.boot.loader.JarLauncher jar 文件的 org.springframework.boot.loader.WarLauncher war文件的启动器 引入依赖 <!-- ...

    hadoop-eclipse-plugin-2.7.0.jar

    - `META-INF`:存储插件的元数据信息,如MANIFEST.MF文件,描述了插件的基本信息和依赖。 - `resources`:包含插件的资源文件,如图标、帮助文档等。 总的来说,Hadoop Eclipse Plugin 2.7.0是Hadoop开发者不可或...

    kie-server-6.5.0.Final-webc.zip

    2. **META-INF**:这是另一个常见的Java应用目录,通常包含元数据,如MANIFEST.MF文件,它描述了jar包的基本信息,比如版本、作者等。此外,可能还有服务注册文件和服务提供者接口实现的配置。 3. **docs**:这个...

    Eclipse插件开发培训

    8. **插件工程内容**: 包括源码结构(如src、MANIFEST.MF、plugin.xml、build.properties等)和二进制结构(如Jar文件、MANIFEST.MF、plugin.xml等)。 9. **Eclipse 示例工程**: 以创建带有视图的插件为例,展示了...

    Java环境配置与设置JAVA_HOME,CLASSPATH,PATH的目的[归类].pdf

    3. **MANIFEST.MF文件**:在创建JAR文件时,可以在MANIFEST.MF文件的`Class-Path`属性中指定额外的类库路径。 避免设置全局CLASSPATH的原因在于,这样做可能导致类库冲突,尤其是当多个项目使用不同版本的库时。...

    基于SpringMVC+Tomcat搭建的WEB工程

    而`META-INF`目录通常用于存放项目相关的元信息,例如在打包成JAR或WAR时的MANIFEST.MF文件。 创建一个基于SpringMVC的Web应用,你需要: 1. 创建Maven或Gradle项目,添加SpringMVC和Tomcat的依赖。 2. 编写web.xml...

    AOM 初体验(一)

    6. `META-INF`:这个目录在Java应用中常见,包含了应用元数据,如MANIFEST.MF文件,用于描述应用的组件和依赖。 7. `.explodedEar`:这个名字可能表明这是一个已展开的Enterprise Application Archive (EAR) 文件,...

    lucene-2.1.0 jar包和事例

    `META-INF`目录是Java的元数据容器,通常包含关于JAR文件本身的元数据,如MANIFEST.MF文件,其中可以声明依赖的库和其他信息。在Lucene的JAR中,可能包含了版本信息和其他重要数据。 `README.txt`文件通常包含有关...

    release:StrongestPaths Cytoscape应用程序的源代码和二进制格式

    StrongestPath是Cytoscape插件,可让用户找到蛋白质-蛋白质相互作用(PPI)网络中最... javac -source 1.6 -cp ".:./lib/*" *.javajar cfm StrongestPath.jar META-INF/MANIFEST.MF *.class ./net快速入门-演示您只需

    maven入门整合SpringMVC登录+调用天气接口实例

    3. **META-INF** 文件夹通常包含项目的元数据,如MANIFEST.MF文件。 4. **error** 可能包含了处理错误或异常的页面,如404或500错误页。 5. **WEB-INF** 目录是Java Web应用的核心,其中包含web.xml(部署描述符),...

Global site tag (gtag.js) - Google Analytics