• META-INF/MANIFEST.MF介绍


    META-INF文件夹相当于一个信息包,目录中的文件和目录获得Java 2平台的认可与解释,用来配置应用程序、扩展程序、类加载器和服务。这个文件夹和其中的 MANIFEST.MF文件,在用jar打包时自动生成。

    执行jar文件的时候,这个jar里是需要具备 META-INF/MANIFEST.MF的,否则java -jar就找不到main class。

    初始结构:

    Manifest-Version: 1.0

    假设文件目录为folder/file.class,

    压缩成 ZIP 文件 folder.zip,则这个 ZIP 文件的内部目录结构为: 

    folder.zip
    `-- folder
    `-- file.class

    如果我们使用 JDK 的 jar 命令把它打成 JAR 文件包 folder.jar,则这个 JAR 文件的内部目录结构为: 

    folder.jar
    `-- META-INF
    `-- MANIFEST.MF
    `-- folder
    `-- file.class


    如果需要打包可直接运行的jar包,需要在MANIFEST.MF添加内容

    Manifest-Version: 1.0
    Main-Class: addJarPkg #Main-Class为主类名称
    Class-Path: lib/java-mysql-connecter.jar #如果需要用到第三方jar包,需要在此注明,多个jar包之间用空格分隔,最后一个jar包后面加两个空格

    一般手动打包时可以自己先写好一个类似文件,在使用jar命令打包时使用 -m 选项覆盖掉自动生成的MANIFEST.MF文件。

    使用工具打包时可以直接选择。

    附件:来自https://www.cnblogs.com/Gandy/p/7290069.html

    MANIFEST.MF文件可能的内容整理:

    Manifest-Version: 1.0
    Created-By: Apache Ant 1.5.1
    Extension-Name: Struts Framework
    Specification-Title: Struts Framework
    Specification-Vendor: Apache Software Foundation
    Specification-Version: 1.1
    Implementation-Title: Struts Framework
    Implementation-Vendor: Apache Software Foundation
    Implementation-Vendor-Id: org.apache
    Implementation-Version: 1.1
    Class-Path:  commons-beanutils.jar commons-collections.jar commons-dig
     ester.jar commons-logging.jar commons-validator.jar jakarta-oro.jar s
     truts-legacy.jar

    如果我们把MANIFEST中的配置信息进行分类,可以归纳出下面几个大类:

    一. 一般属性

    1. Manifest-Version
     用来定义manifest文件的版本,例如:Manifest-Version: 1.0
    2. Created-By
     声明该文件的生成者,一般该属性是由jar命令行工具生成的,例如:Created-By: Apache Ant 1.5.1
    3. Signature-Version
     定义jar文件的签名版本
    4. Class-Path
     应用程序或者类装载器使用该值来构建内部的类搜索路径

    二. 应用程序相关属性

    1. Main-Class
     定义jar文件的入口类,该类必须是一个可执行的类,一旦定义了该属性即可通过 java -jar x.jar来运行该jar文件。
     
    三. 小程序(Applet)相关属性

    1. Extendsion-List
     该属性指定了小程序需要的扩展信息列表,列表中的每个名字对应以下的属性
    2. <extension>-Extension-Name
    3. <extension>-Specification-Version
    4. <extension>-Implementation-Version
    5. <extension>-Implementation-Vendor-Id
    5. <extension>-Implementation-URL

    四. 扩展标识属性

    1. Extension-Name
     该属性定义了jar文件的标识,例如Extension-Name: Struts Framework
     
    五. 包扩展属性
     
    1. Implementation-Title   定义了扩展实现的标题
    2. Implementation-Version   定义扩展实现的版本
    3. Implementation-Vendor   定义扩展实现的组织  
    4. Implementation-Vendor-Id   定义扩展实现的组织的标识
    5. Implementation-URL :   定义该扩展包的下载地址(URL)
    6. Specification-Title   定义扩展规范的标题
    7. Specification-Version   定义扩展规范的版本
    8. Specification-Vendor   声明了维护该规范的组织
    9. Sealed   定义jar文件是否封存,值可以是true或者false (这点我还不是很理解)

    六. 签名相关属性

    签名方面的属性我们可以来参照JavaMail所提供的mail.jar中的一段

    Name: javax/mail/Address.class
    Digest-Algorithms: SHA MD5 
    SHA-Digest: AjR7RqnN//cdYGouxbd06mSVfI4=
    MD5-Digest: ZnTIQ2aQAtSNIOWXI1pQpw==

    这段内容定义类签名的类名、计算摘要的算法名以及对应的摘要内容(使用BASE方法进行编码)

    七.自定义属性

    除了前面提到的一些属性外,你也可以在MANIFEST.MF中增加自己的属性以及响应的值,例如J2ME程序jar包中就可能包含着如下信息

    MicroEdition-Configuration: CLDC-1.0
    MIDlet-Name: J2ME_MOBBER Midlet Suite
    MIDlet-Info-URL: http://www.javayou.com
    MIDlet-Icon: /icon.png
    MIDlet-Vendor: Midlet Suite Vendor
    MIDlet-1: mobber,/icon.png,mobber
    MIDlet-Version: 1.0.0
    MicroEdition-Profile: MIDP-1.0
    MIDlet-Description: Communicator

  • 相关阅读:
    UIWebView 滑动卡停 (卡顿)
    UITapGestureRecognizer 手势传值
    ios8 新特性 UITableViewRowAction
    unrecognized selector sent to instance出现的原因
    iOS 界面上绘制不同字体 颜色 大小的字符串
    NSNumberFormatter 数字格式化输出
    iOS开发-63】Unknown type name "CGRect",did you mean "Rect"?的解决方案
    收起键盘
    iOS8 【xcode6中添加pch全局引用文件】
    fastjson安全漏洞-20200601升级方案
  • 原文地址:https://www.cnblogs.com/jayworld/p/9767228.html
Copyright © 2020-2023  润新知