专栏首页偏前端工程师的驿站Java魔法堂:打包知识点之META-INF/MAINFEST.MF

Java魔法堂:打包知识点之META-INF/MAINFEST.MF

一、前言                                    

   通过执行形如 jar -cvf src.jar src 命令将多个.class文件打包成JAR包时,你会发现JAR包中除了src目录外还多了个MATE-INF/MAINFEST.MF,那是为什么呢?

   其实关于JAR包的描述信息、启动时的配置信息和安全性信息等均保存在META-INF下,因此了解META-INF目录对发布、部署十分重要的哦!下面仅为部分内容的整理,待日后深入实践后再补充完整。官方文档为:http://docs.oracle.com/javase/7/docs/technotes/guides/jar/jar.html

二、META-INF/MAINFEST.MF清单文件组成元素                

  META-INF/MAINFEST.MF清单文件由1个 main-section 和0到N个 individual-section 组成,而每个section中含有多个attribute组成,其中 main-section 中的attribute命名为 main-attribute ,而 individual-section 中的attribute命名为 perentry-attribute 。

  各个attribute间使用<CR><LF>作为分隔符(Unix下则使用<LF>作为分隔符,Mac下则使用<CR>作为分隔符)。

individual-section 以名为 Name 的 perentry-attribute 来标识该区域,且作为该区域的起始行。

  示例:

Manifest-Version: 1.0
Created-By: 1.2 (Sun Microsystems Inc.)
Sealed: true
Name: foo/bar/
Sealed: false

main-section 用于描述JAR包的安全、配置信息,和对JAR包内所有包和文件的默认信息。

  每个 individual-section 用于描述JAR包中单个包或文件,但不是JAR包中的每个包和文件都必须配置 individual-section ,但对于需要被签名的文件就必须配置对应的 individual-section 了。

三、 main-attribute 详解                            

   1. 常规属性

Mainfest-Version: JAR版本号
Created-By: 生产者
Signature-Version: 签名版本
Class-Path: 依赖项列表,若存在多个依赖项时则采用空格分隔。依赖项路径为以JAR包路径为参考系的相对路径

   2. 可执行的JAR包属性

Main-Class: main函数所在的全限定类名

四、 perentry-attribute 详解                        

  1. Name属性 individual-section 的起始属性,包命名规范形如:com/test/myapp/,文件命名规范形如:com/test/myapp/MyApp.class。

  2. 定义文件内容

Content-Type: MIME类型(格式为:type/subtype。例如,image/jpeg)

五、注意事项                               

  1. 键值对独立占据一行或多行;

  2. 每行最大长度为72个字符;

  3. 每行的最后一个字符必须以回车符换行符结尾,而且回车符换行符不能有空格(使用正则表达式表达每行规范就是/^.+\S\r\n$/);

  4. 若键值对独立占据多行,那么从第二行起,必须以一个或以上的空格开头(使用正则表达式表达第二行及其余行的规范就是/^[ ]{1,}.+\S\r\n$/)。

参考                                  

http://blog.csdn.net/zhifeiyu2008/article/details/8829637

http://docs.oracle.com/javase/7/docs/technotes/guides/jar/jar.html

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • JS魔法堂:jsDeferred源码剖析

    一、前言                                最近在研究Promises/A+规范及实现,而Promise/A+规范的制定则很大程度地...

    ^_^肥仔John
  • Java魔法堂:注解用法详解——@Override

    一、前言                                         现在有Son和Parent两个类,且类型Son将会重写类型Parent...

    ^_^肥仔John
  • CentOS6.5菜鸟之旅:文件权限详解

    一、前言                                   Linux下所有资源、设备均被视作文件来操作,而文件权限则是决定用户可各文件操作的...

    ^_^肥仔John
  • Fansmitter:利用声波入侵物理隔离系统

    物理隔离是指通过物理手段将目标系统和因特网以及其他一些不安全的网络进行隔离的一种网络安全措施。在一些需要规避敏感或者关键信息泄露风险的系统中这种措施经常会被采用...

    FB客服
  • 【模型优化】开源 |CVPR2020|ECA-Net深度卷积神经网络的有效通道注意,在图像分类、目标检测和实例分割方面更高效

    最近,通道注意力机制在改善深度卷积神经网络(CNNs)性能方面具有巨大的潜力。然而,大多数现有的方法致力于开发更复杂的注意力模块,以获得更好的性能,这不可避免地...

    CNNer
  • 使用java8API遍历过滤文件目录及子目录及隐藏文件

    本文中为大家介绍使用java8 Stream API逐行读取文件,以及根据某些条件过滤文件内容

    字母哥博客
  • perl模块安装大全

    今天又有小伙伴微信问我perl模块安装的问题,因为ENSEMBL发布的大多数数据库以及软件都是基于perl的,尤其是分量很重的VEP,所以即使你再如何如何的讨厌...

    生信技能树
  • 亲耳“听见”神经网络的声音:梯度变化一听即可辨别(附代码)

    网友做了一个非常有趣的实验:将每个神经网络层梯度范式转换成了一个音调,这样人类就可以凭借听觉,来很好的分辨出非常小的干扰,比如节奏和音调。

    新智元
  • 亲耳“听见”神经网络的声音:梯度变化一听即可辨别(附代码)

    网友做了一个非常有趣的实验:将每个神经网络层梯度范式转换成了一个音调,这样人类就可以凭借听觉,来很好的分辨出非常小的干扰,比如节奏和音调。

    代码医生工作室

扫码关注云+社区

领取腾讯云代金券