`
浴盆儿
  • 浏览: 80485 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类
最新评论

MANIFEST.MF用jar命令打包后格式混乱

阅读更多

我们平时在打jar包时会需要指定当前jar包的依赖jar包,那么我们就要在MANIFEST.MF文件的Class-Path中来声明这些包,通常可以直接手工修改jar包中的MANIFEST.MF文件,在别的jar包里如果也需要这个MANIFEST.MF文件,我们可以直接copy过去,也是可以使用的。

 

但是如果是用jar命令打包,指定这个手工修改得MANIFEST.MF文件,jar命令就会根据MANIFEST.MF的定义格式来重新排列MANIFEST.MF文件中的信息,造成格式混乱,有的依赖jar包在MANIFEST.MF文件有声明但是使用时仍然找不到。


我们可以利用java提供的java.util.jar.Manifest类来处理,这样可以不用考虑MANIFEST.MF的文件格式,Manifest类可以帮助我们处理,用jar命令指定MANIFEST.MF文件时也不会发生格式改变的问题

 

提供个我写的Manifest类得使用方法

 

package com.egi.core.util;

import java.io.File;
import java.io.FileOutputStream;
import java.util.jar.Attributes;
import java.util.jar.Manifest;

public class ManifestUtil {

	public static void create(String filePath, String classDir)
			throws Exception {
		File mfFile = new File(filePath);
		if (!mfFile.exists()) {
			mfFile.createNewFile();
		}
		FileOutputStream fos = new FileOutputStream(mfFile);
		StringBuffer sb = new StringBuffer();
		File classFile = new File(classDir);
		int count = 0;
		if (classFile.exists()) {
			if (classFile.isDirectory()) {
				File[] files = classFile.listFiles();
				for (int i = 0; i < files.length; i++) {
					if (files[i].getName().endsWith(".jar")) {
						count++;
						sb.append(files[i].getName()).append(" ");
					}
				}
			}
		}
		System.out.println("There are " + count + " jar files!");
		System.out.println(sb.toString());
		Manifest m = new Manifest();
		Attributes a = m.getMainAttributes();
		a.put(Attributes.Name.MANIFEST_VERSION, "1.0");
		a.put(Attributes.Name.CLASS_PATH, sb.toString());
		System.out.println("a.getValue =---------="
				+ a.getValue(Attributes.Name.CLASS_PATH));
		System.out.println(a.getValue(Attributes.Name.CLASS_PATH).length());
		m.write(fos);
		fos.flush();
		fos.close();

	}
}

 

2
1
分享到:
评论

相关推荐

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

    MANIFEST.MF文件是Java档案(JAR)文件格式的一部分,它包含了有关JAR文件元数据的重要信息。这篇博文可能是从其他来源转载的,用于解释这个关键文件的结构和用途。 在Java开发中,MANIFEST.MF文件是每个JAR文件...

    MANIFEST.MF 读写操作

    在 Java 中,我们可以使用 `java.util.jar.Manifest` 类来处理 MANIFEST.MF 文件。以下是一个简单的读取示例: ```java try (InputStream is = new FileInputStream("path/to/MANIFEST.MF")) { Manifest manifest ...

    android apk文件里MANIFEST.MF、CERT.SF、CERT.RSA三者的关系(csdn)————程序.pdf

    在Android应用开发中,APK文件是应用程序的打包格式,其中包含了所有必要的资源和代码。为了确保APK的安全性和完整性,Android系统使用签名机制。在APK中,MANIFEST.MF、CERT.SF和CERT.RSA这三个文件是签名过程的...

    hhclass汉化 用来修改MANIFEST.MF

    MANIFEST.MF的正确配置对于程序的运行和打包是必不可少的。当需要对MANIFEST.MF进行汉化或定制时,hhclass汉化工具就显得非常实用。 hhclass汉化工具是一款专为Java开发者设计的工具,用于修改和汉化JAR文件中的...

    详解MANIFEST.MF文件

    例如,可以通过`java.util.jar.JarFile`类的`getManifest()`方法来访问MANIFEST文件: ```java JarFile jar = new JarFile("path/to/your.jar"); Manifest manifest = jar.getManifest(); Attributes attributes = ...

    MANIFEST.MF

    MANIFEST.MF

    MANIFEST.MF.mf

    MANIFEST.MF.mf

    MANIFEST.MF的应用以及如何读取jar包外的log4j.properties

    标题中的“MANIFEST.MF...总的来说,MANIFEST.MF和log4j.properties是Java开发中的两个重要元素,前者关乎程序的打包和运行,后者关乎日志的管理和调试。掌握这两者,能帮助开发者更好地组织和控制他们的Java应用程序。

    把.class用jar工具打包成可执行程序.doc

    - 使用 `jar` 命令打包这些 `.class` 文件。`jar` 命令的格式通常是: ```bash jar cfm jarfile manifestfile classfile1 [classfile2 ...] ``` 这里: - `c` 表示创建新的 JAR 文件。 - `f` 表示指定生成的 ...

    manifest.json(文档标准格式).rar

    为了确保manifest.json文件的正确性,开发者可以使用在线验证工具,如Chrome的Manifest Validator。如果manifest.json存在语法错误或缺少必要字段,这些工具会给出错误提示,帮助开发者快速定位并修复问题。 总结来...

    cxf-manifest.jar

    webservice CXF 报错:java.lang.NoClassDefFoundError: org/apache/neethi/builders/AssertionBuilder 需要用到此jar文件 通过apache官网可获得。 文件位置\apache-cxf-2.7.13\lib

    JAR命令&JAR包详解.doc

    jar cvfm hello.jar manifest.mf hello ``` 创建一个包含`manifest.mf`文件的JAR文件。`manifest.mf`文件通常包含一些元数据,如主类名、依赖项等。 8. **创建不含MANIFEST.MF文件的JAR文件** ```bash jar cv...

    jar命令集合

    创建`hello.jar`时不包含`MANIFEST.MF`文件和`META-INF`目录。 9. **使用`-C`选项** ``` jar cvfm hello.jarmymanifest.mf -Chello/ ``` 先切换到`hello`目录下,再执行JAR命令,这种方式避免了JAR包中包含...

    可执行jar文件.以及执行命令

    这个命令会创建一个名为`myapp.jar`的JAR文件,其中包含`com/example`目录下的所有类文件,并使用`MANIFEST.MF`作为清单文件。 3. **执行JAR文件**:运行JAR文件有几种方式: - **使用java命令**:通过指定`-jar`...

    制作可执行的JAR文件包及jar命令详解.doc

    在这个命令中,cvfm是jar命令的选项,test.jar是生成的JAR文件名,manifest.mf是MANIFEST文件的名称,test是要打包的目录。 制作可执行的JAR文件包需要编辑MANIFEST文件,并使用jar命令将Java程序打包成JAR文件包。...

    jquery-manifest.js

    《jQuery Manifest 插件详解与应用实践》 在Web开发领域,jQuery库以其简洁的API和强大的功能,深受开发者喜爱。然而,随着Web应用程序变得越来越复杂,管理前端资源的依赖关系变得至关重要。这就是jQuery Manifest...

    jar命令大全打包及运行

    jar cvfm Test.jar META-INF\MANIFEST.MF test\* ``` 其中,`c`表示创建新文件,`v`为详细模式,`f`指定了JAR文件名,`m`用于指定清单文件,`test\*`表示将`test`目录下的所有文件添加到JAR中。 #### 三、清单...

    jar的使用.doc

    `jar cvfm hello.jar manifest.mf hello` 创建的JAR包包含一个MANIFEST.MF文件,指定为`hello`目录下的内容。 8. **忽略MANIFEST.MF:** `jar cvfM hello.jar hello` 创建的JAR包不包含MANIFEST.MF文件。 9. *...

    java打包jar.pdf

    运行Java应用程序时,如果没有指定MANIFEST.MF中的`Main-Class`,则需要手动提供完整的类路径和主类名,例如`java -classpath myapplication.jar com.example.myapp.MyAppMain`。而有了`Main-Class`,则可以通过`...

    JAR文件包及jar命令详解

    例如,使用`jar cvfm test.jar manifest.mf test`命令,可以将test目录下的内容打包进test.jar,并指定manifest.mf作为MANIFEST文件。 2. 创建可执行的JAR文件包: 可执行JAR文件包是Java程序的常见发布形式,因为...

Global site tag (gtag.js) - Google Analytics