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

本文介绍了一种使用Java的Manifest类来管理jar包依赖的方法,避免了手工修改MANIFEST.MF文件时可能遇到的格式混乱问题,并提供了一个实用的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们平时在打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();

	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值