Jar文件及MANIFEST.MF 文件入门

解析MANIFEST.MF文件
本文介绍了MANIFEST.MF文件在Jar包中的作用及其常见键值对,详细解释了安全和代理相关的配置项。
部署运行你感兴趣的模型镜像

 

前言
     在看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

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

【无人机】基于改进粒子群算法的无人机路径规划研究[遗传算法、粒子群算法进行比较](Matlab代码实现)内容概要:本文围绕基于改进粒子群算法的无人机路径规划展开研究,重点探讨了在复杂环境中利用改进粒子群算法(PSO)实现无人机三维路径规划的方法,并将其与遗传算法(GA)、标准粒子群算法等传统优化算法进行对比分析。研究内容涵盖路径规划的多目标优化、避障策略、航路点约束以及算法收敛性寻优能力的评估,所有实验均通过Matlab代码实现,提供了完整的仿真验证流程。文章还提到了多种智能优化算法在无人机路径规划中的应用比较,突出了改进PSO在收敛速度全局寻优方面的优势。; 适合人群:具备一定Matlab编程基础优化算法知识的研究生、科研人员及从事无人机路径规划、智能优化算法研究的相关技术人员。; 使用场景及目标:①用于无人机在复杂地形或动态环境下的三维路径规划仿真研究;②比较不同智能优化算法(如PSO、GA、蚁群算法、RRT等)在路径规划中的性能差异;③为多目标优化问题提供算法选型改进思路。; 阅读建议:建议读者结合文中提供的Matlab代码进行实践操作,重点关注算法的参数设置、适应度函数设计及路径约束处理方式,同时可参考文中提到的多种算法对比思路,拓展到其他智能优化算法的研究与改进中。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值