`
huanghuizz
  • 浏览: 85266 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

java中的manifest文件格式

    博客分类:
  • java
阅读更多

在打jar包时,我们有时需要对manifest文件进行描述,在这里记录manifest相关的格式,以供日后参考。


manifest基本格式:


manifest 文件的格式 是很简单的,每一行都是 名-值 对应的:属性名开头,接着是 ":" ,然后是属性值,每行最多72个字符,如果需要增加,你可以在下一行续行,续行以空格开头,以空格开头的行都会被视为前一行的续行,所有在开头的属性都是全局的。


有main函数的jar包的manifest的格式:


       Manifest-Version:1.0
       Created-By:1.5.08 (Sun   Microsystems   Inc.)

       Main-Class: com.pantosoft.impdb.ImpMain


       Manifest-Version表示使用1.0的manifest文件

       Created-By表示使用了的sun的1.5.08的jar生成

       Main-Class表示有主函数的类


基于其他jar并有main函数的manifest的格式:


       Manifest-Version:1.0
       Created-By:1.5.08 (Sun   Microsystems   Inc.)

       Main-Class: com.pantosoft.impdb.ImpMain

       Class-Path:mail.jar activation.jar


       Class-Path表示基于其他的2个jar包,并且以空格隔开表示有个jar包。如有路径,侧表示如下:

       Class-Path:ext/mail.jar ext/activation.jar


基于其他jar并有多个main函数的manifest的格式:


还有一种Multiple Main Classes情况,如果你的应用程序可能有命令行版本和GUI版本,或者一些不同的应用共享很多相同的代码,这时你可能有多个Main Class,我们建议你采取这样的策略:把共享的类打成lib包,然后把不同的应用打成不  同的包,分别标志主类:如下


       Manifest for impDB.jar :

       Manifest-Version:1.0
       Created-By:1.5.08 (Sun   Microsystems   Inc.)

       Class-Path:mail.jar activation.jar


       Manifest for impDB.jar :

       Manifest-Version:1.0
       Created-By:1.5.08 (Sun   Microsystems   Inc.)

       Class-Path:impDB.jar

       Main-Class: com.pantosoft.impdb.ImpMain


       Manifest for ExpDB.jar :

       Manifest-Version:1.0
       Created-By:1.5.08 (Sun   Microsystems   Inc.)

       Class-Path:expDB.jar

       Main-Class: com.pantosoft.impdb.ExpMain


       impDB.jar 和  ExpDB.jar 的manifest文件中分别注明各自的 Main Class



Package Versioning:


完成发布后,如果使用者想了解 ,哪些代码是谁的?目前是什么版本?使用什么版本的类库?解决的方法很多,manifest提供了一个较好的方法,你可以在manifest文件中描述每一个包的信息。Java 秉承了实现说明与描述分离的原则,package 的描述 定义了package 是什么,实现说明定义了谁提供了描述的实现,描述和实现包含名、版本号和提供者。要得到这些信息,可以查看JVM的系统属性(使用 java.lang.System.getProperty() )在manifest文件中,我可以为每个package定义描述和实现版本,声明名字,并加入描述属性和实现属性,这些属性是:

Specification-Title
Specification-Version
Specification-Vendor
Implementation-Title
Implementation-Version
Implementation-Vendor

当要提供一个类库或编程接口时,描述信息显得是很重要,见以下范例:

Manifest-Version:1.0
Created-By:1.5.08 (Sun   Microsystems   Inc.)
Class-Path: mail.jar activation.jar

Name: com/example/myapp/
Specification-Title: MyApp
Specification-Version: 2.4
Specification-Vendor: example.com
Implementation-Title: com.example.myapp
Implementation-Version: 2002-03-05-A
Implementation-Vendor: example.com



Package Version 查询:


在manifest文件中加入package描述后,就可以使用Java提供的java.lang.Package class进行Package 的信息查询,这里列举3个最基本的获取package object的方法:

1.Package.getPackages():返回系统中所有定义的package列表
2.Package.getPackage(String packagename):按名返回package
3.Class.getPackage():返回给定class所在的package

使用这方法就可以动态的获取package信息. 需要注意的是如果给定的package中没有class被加载,则也无法获得package 对象


Manifest 技巧:

  1. 总是以Manifest-Version属性开头
  2. 每行最长72个字符,如果超过的化,采用续行
  3. 确认每行都以回车结束,否则改行将会被忽略
  4. 如果Class-Path 中的存在路径,使用"/"分隔目录,与平台无关
  5. 使用空行分隔主属性和package属性
  6. 使用"/"而不是"."来分隔package 和class ,比如 com/example/myapp/
  7. class 要以.class结尾,package 要以 / 结尾
分享到:
评论

相关推荐

    Java程序创建Manifest文件

    当我们需要运行一个与其他jar文件有关联jar文件时,如果jar文件里面的MANIFEST.MF文件没有配置好,那在运行时就要报异常:Exception in thread "main" java.lang.NoClassDefFoundError。原因:未找到关联jar文件里面...

    MANIFEST文件配置

    根据 **MIDP 规范** 的规定,如果 JAD 文件与 MANIFEST 文件中的这些属性不一致,设备将优先使用 JAD 文件中的属性。这种机制确保了 JAD 文件能够作为 MANIFEST 文件的有效补充,特别是在没有网络连接的情况下。 **...

    MANIFEST.MF 文件内容详解(转)

    以下是MANIFEST.MF文件中常见的部分及其作用: 1. **Main-Class**: 这个条目指定了JAR文件运行时的主类,即包含`public static void main(String[] args)`方法的那个类。它是Java应用程序的入口点。 2. **Class-...

    安卓反解manifest文件

    当我们谈论“安卓反解manifest文件”,实际上是指通过特定工具或技术,将APK包中的`AndroidManifest.xml`文件反编译成可读的文本格式,便于理解和分析应用的功能和行为。 `AXMLPrinter2.jar`是一个常用的工具,用于...

    pom.zip_java maven_pom mainfest java_pom manifest 标签_pom 文件 mani

    在描述中提到的“Maven定义Manifest文件方法”,指的是如何在Maven的`pom.xml`文件中配置`maven-jar-plugin`来生成包含Manifest的JAR。以下是一个示例配置: ```xml <groupId>org.apache.maven.plugins ...

    在eclipse中把java文档打包成jar文件

    在Manifest文件中,我们需要配置入口类、依赖的库文件等信息。例如: Manifest-Version: 1.0 Main-Class: gobang.GobangGame Class-Path: lib\junit.jar lib\log4j-1.2.12.jar lib\mysql-connector-java-3.1.12-bin...

    java生成Jar文件命令

    为了使Java程序能够直接运行,你需要在Manifest文件中指定主类。可以使用以下命令创建包含主类的Manifest文件: ```bash echo "Main-Class: com.example.Main" > manifest.txt ``` 然后在创建Jar文件时引用这个...

    详解MANIFEST.MF文件

    为了获取MANIFEST文件中的信息,Java SDK提供了相应的API支持。例如,可以通过`java.util.jar.JarFile`类的`getManifest()`方法来访问MANIFEST文件: ```java JarFile jar = new JarFile("path/to/your.jar"); ...

    java 打包可执行文件

    JAR文件是Java平台特有的归档格式,它可以包含多个Java类、资源文件、元数据(如清单文件)等。JAR文件的主要作用是便于代码的分发和部署,因为它们可以被Java虚拟机(JVM)直接执行。JAR文件还可以实现代码的压缩,...

    Java+PDF批量压缩图片格式的PDF档(源码Demo)

    Java批量压缩图片格式的PDF档(源码Demo) 适用:仅针对纯图片型的pdf(类似扫描版)进行压缩 原理:压缩图片然后再另存成新文件 实例如下: ├── META-INF │ └── MANIFEST.MF ├── pom.xml └── src ├...

    Java解析apk文件

    2. **获取manifest.xml**:在ZIP文件中找到manifest.xml,使用`ZipEntry`获取。 ```java ZipEntry manifestEntry = apkFile.getEntry("AndroidManifest.xml"); InputStream manifestStream = apkFile.getInputStream...

    纯java读取apk文件信息(包括版本号,包名等)

    本教程将详细介绍如何使用纯Java来读取APK文件中的关键信息,如版本号和包名。 首先,我们需要了解APK文件的结构。一个APK文件本质上是一个ZIP格式的压缩包,我们可以用Java内置的`java.util.zip`库来处理。以下是...

    怎么将java的类文件打包成jar文件

    - **描述 JAR 文件内容**:Manifest 文件中记录了 JAR 文件的基本信息和配置参数。 - **标识主类**:当一个 JAR 文件包含了一个应用程序的主要入口点时,可以通过 Manifest 文件指定主类的全限定名。 - **管理依赖**...

    java文件打包例子

    在本例中,`RoundButton.class` 需要被打包进名为 `abc.jar` 的JAR文件中。具体操作步骤如下: 1. **准备工作:** 确保 `RoundButton.class` 已经编译完成,并且存放在指定目录(如本例中的 `D:\abc` 目录)。 2....

    Java制作exe文件

    2. **选择JAR in EXE模式**:在配置向导中,选择“JAR in EXE”模式,这将允许你将整个Java应用程序打包到一个单一的exe文件中。 3. **指定JAR文件和资源**:添加你的.jar文件,并选择是否包含任何附加资源,如图片...

    Java打包成jar文件,以及将jar文件导出为exe文件方法汇总[汇编].pdf

    Java 打包成 jar 文件和将 jar 文件导出为 exe 文件的方法汇总 本文档将详细介绍 Java 打包成 jar 文件和将 jar 文件导出为 exe 文件的方法汇总。Java 是一种流行的编程语言,广泛应用于软件开发、Android 应用开发...

    Linux上执行带main方法的java文件

    这里需要注意的是命令中的`-jar`选项,它告诉Java运行时环境去读取该文件的`manifest.mf`文件,并从中找出`Main-Class`,然后执行该类的`main`方法。 #### 总结 通过上述步骤,可以在Linux环境下顺利地执行含有`...

Global site tag (gtag.js) - Google Analytics