在打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 技巧:
-
总是以Manifest-Version属性开头
-
每行最长72个字符,如果超过的化,采用续行
-
确认每行都以回车结束,否则改行将会被忽略
-
如果Class-Path 中的存在路径,使用"/"分隔目录,与平台无关
-
使用空行分隔主属性和package属性
-
使用"/"而不是"."来分隔package 和class ,比如 com/example/myapp/
-
class 要以.class结尾,package 要以 / 结尾
分享到:
相关推荐
当我们需要运行一个与其他jar文件有关联jar文件时,如果jar文件里面的MANIFEST.MF文件没有配置好,那在运行时就要报异常:Exception in thread "main" java.lang.NoClassDefFoundError。原因:未找到关联jar文件里面...
根据 **MIDP 规范** 的规定,如果 JAD 文件与 MANIFEST 文件中的这些属性不一致,设备将优先使用 JAD 文件中的属性。这种机制确保了 JAD 文件能够作为 MANIFEST 文件的有效补充,特别是在没有网络连接的情况下。 **...
以下是MANIFEST.MF文件中常见的部分及其作用: 1. **Main-Class**: 这个条目指定了JAR文件运行时的主类,即包含`public static void main(String[] args)`方法的那个类。它是Java应用程序的入口点。 2. **Class-...
当我们谈论“安卓反解manifest文件”,实际上是指通过特定工具或技术,将APK包中的`AndroidManifest.xml`文件反编译成可读的文本格式,便于理解和分析应用的功能和行为。 `AXMLPrinter2.jar`是一个常用的工具,用于...
在描述中提到的“Maven定义Manifest文件方法”,指的是如何在Maven的`pom.xml`文件中配置`maven-jar-plugin`来生成包含Manifest的JAR。以下是一个示例配置: ```xml <groupId>org.apache.maven.plugins ...
在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程序能够直接运行,你需要在Manifest文件中指定主类。可以使用以下命令创建包含主类的Manifest文件: ```bash echo "Main-Class: com.example.Main" > manifest.txt ``` 然后在创建Jar文件时引用这个...
为了获取MANIFEST文件中的信息,Java SDK提供了相应的API支持。例如,可以通过`java.util.jar.JarFile`类的`getManifest()`方法来访问MANIFEST文件: ```java JarFile jar = new JarFile("path/to/your.jar"); ...
JAR文件是Java平台特有的归档格式,它可以包含多个Java类、资源文件、元数据(如清单文件)等。JAR文件的主要作用是便于代码的分发和部署,因为它们可以被Java虚拟机(JVM)直接执行。JAR文件还可以实现代码的压缩,...
Java批量压缩图片格式的PDF档(源码Demo) 适用:仅针对纯图片型的pdf(类似扫描版)进行压缩 原理:压缩图片然后再另存成新文件 实例如下: ├── META-INF │ └── MANIFEST.MF ├── pom.xml └── src ├...
2. **获取manifest.xml**:在ZIP文件中找到manifest.xml,使用`ZipEntry`获取。 ```java ZipEntry manifestEntry = apkFile.getEntry("AndroidManifest.xml"); InputStream manifestStream = apkFile.getInputStream...
本教程将详细介绍如何使用纯Java来读取APK文件中的关键信息,如版本号和包名。 首先,我们需要了解APK文件的结构。一个APK文件本质上是一个ZIP格式的压缩包,我们可以用Java内置的`java.util.zip`库来处理。以下是...
- **描述 JAR 文件内容**:Manifest 文件中记录了 JAR 文件的基本信息和配置参数。 - **标识主类**:当一个 JAR 文件包含了一个应用程序的主要入口点时,可以通过 Manifest 文件指定主类的全限定名。 - **管理依赖**...
在本例中,`RoundButton.class` 需要被打包进名为 `abc.jar` 的JAR文件中。具体操作步骤如下: 1. **准备工作:** 确保 `RoundButton.class` 已经编译完成,并且存放在指定目录(如本例中的 `D:\abc` 目录)。 2....
2. **选择JAR in EXE模式**:在配置向导中,选择“JAR in EXE”模式,这将允许你将整个Java应用程序打包到一个单一的exe文件中。 3. **指定JAR文件和资源**:添加你的.jar文件,并选择是否包含任何附加资源,如图片...
Java 打包成 jar 文件和将 jar 文件导出为 exe 文件的方法汇总 本文档将详细介绍 Java 打包成 jar 文件和将 jar 文件导出为 exe 文件的方法汇总。Java 是一种流行的编程语言,广泛应用于软件开发、Android 应用开发...
这里需要注意的是命令中的`-jar`选项,它告诉Java运行时环境去读取该文件的`manifest.mf`文件,并从中找出`Main-Class`,然后执行该类的`main`方法。 #### 总结 通过上述步骤,可以在Linux环境下顺利地执行含有`...