package com.horse.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 main(String[] args){
try {
ManifestUtil.createManifest("c:/111/MANIFEST.MF", "C:/111/lib","lib","com.horse.StuManager");
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 生成manifest文件
* @param filePath 保存manifest文件的路径+文件名,例如:c:/111/MANIFEST.MF
* @param jarDir 存放被引用jar的文件夹路径,例如:C:/111/lib
* @param classDirPre 相对路径,例如:如果被引用jar放在相对入口jar的lib文件夹里面,该参数就设置成"lib";如果是平级,该参数可设置成空字符串或null
* @param mainClassPath 主函数路径,例如:com.horse.StuManager
* @throws Exception
*/
public static void createManifest(String filePath, String jarDir, String classDirPre,String mainClassPath)
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(jarDir);
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(((classDirPre==null || classDirPre.equals(""))?"" : (classDirPre + "/")) + 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");
System.out.println("MANIFEST_VERSION=" + a.getValue(Attributes.Name.MANIFEST_VERSION));
if(mainClassPath != null && !mainClassPath.equals("")){
a.put(Attributes.Name.MAIN_CLASS, mainClassPath);
System.out.println("MAIN_CLASS=" + a.getValue(Attributes.Name.MAIN_CLASS));
}
a.put(Attributes.Name.CLASS_PATH, sb.toString());
System.out.println("CLASS_PATH=" + a.getValue(Attributes.Name.CLASS_PATH));
m.write(fos);
fos.flush();
fos.close();
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
当我们需要运行一个与其他jar文件有关联jar文件时,如果jar文件里面的MANIFEST.MF文件没有配置好,那在运行时就要报异常:Exception in thread "main" java.lang.NoClassDefFoundError。原因:未找到关联jar文件里面的Class,解决方法: 1.把这些乱七八糟的jar文件全部设置到操作系统里面的classpath环境变量中 2.修改运行jar里面的MANIFEST.MF,把关联jar文件设置在里面。 我提供的是一个生成MANIFEST.MF的Java程序,希望可以帮助大家的忙。
资源推荐
资源详情
资源评论
收起资源包目录
Manifest文件示例.rar (7个子文件)
111
Main.bat 20B
ManifestUtil.java 2KB
MANIFEST.MF 85B
lib
stu.jar 918B
JMain.bat 35B
StuManager.bat 40B
stuMng.jar 2KB
共 7 条
- 1
ford20082000
- 粉丝: 23
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
前往页