我在查询怎么把java项目打包成jar包时,很多文章都提到了MANIFEST.MF这个文件,但是对于怎么生成这个文件,都只是说了手写,手写,手写。真好意思啊。

于是我就写了一个简易版的自动生成代码,只生成了比较关键的部分。

lib信息取自.classpath文件,如果由于ide的原因没有这个文件或者格式不一样,本文方法不适用(我用的是myeclipse)。

package test;import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;public class Test {/*** @param args* @throws IOException */public static void main(String[] args) throws IOException {// TODO Auto-generated method stubString mainClass = Test.class.getName();  //要启动的类System.out.println(new File(".classpath").exists());List<String> list = readFile(".classpath");Pattern pattern = Pattern.compile("path=\"(.*?)\"");Pattern patternCheck = Pattern.compile("kind=\"lib\"");Matcher matcher;String libStr = "";for(String str : list){matcher = patternCheck.matcher(str);if(!matcher.find())continue;matcher = pattern.matcher(str);if(matcher.find())libStr += matcher.group(1) + " ";}if(libStr == null || libStr.length() == 0)libStr += " ";File file = new File("MANIFEST.MF");file.delete();file.createNewFile();writeTxtFile(file, "Manifest-Version: 1.0");writeTxtFile(file, "Main-Class: " + mainClass);writeTxtFile(file, "Class-Path: " + libStr);}public static List<String> readFile(String path) throws IOException {List<String> list = new ArrayList<String>();FileInputStream fis = new FileInputStream(path);InputStreamReader isr = new InputStreamReader(fis, "UTF-8");BufferedReader br = new BufferedReader(isr);String line = "";while ((line = br.readLine()) != null) {if (line.lastIndexOf("---") < 0) {list.add(line);}}br.close();isr.close();fis.close();return list;}public static boolean writeTxtFile(File file, String newStr) throws IOException {boolean flag = false;String filein = newStr + "\r\n";String temp = "";FileInputStream fis = null;InputStreamReader isr = null;BufferedReader br = null;FileOutputStream fos = null;PrintWriter pw = null;try {fis = new FileInputStream(file);isr = new InputStreamReader(fis);br = new BufferedReader(isr);StringBuffer buf = new StringBuffer();for (int j = 1; (temp = br.readLine()) != null; j++) {buf = buf.append(temp);buf = buf.append(System.getProperty("line.separator"));}buf.append(filein);fos = new FileOutputStream(file);pw = new PrintWriter(fos);pw.write(buf.toString().toCharArray());pw.flush();flag = true;} catch (IOException e) {throw e;} finally {if (pw != null) {pw.close();}if (fos != null) {fos.close();}if (br != null) {br.close();}if (isr != null) {isr.close();}if (fis != null) {fis.close();}}return flag;}}

代码生成MANIFEST.MF文件相关推荐

  1. MANIFEST.MF文件的格式

    MANIFEST.MF文件的格式 1. 基本格式 属性名称+:+空格+属性值 2. 没行最多72个字符,换行继续必须以空格开头 3. 文件最后必须要有一个回车换行 4. Class-Path 当前路径 ...

  2. MANIFEST.MF文件全面解析

    (一)简介 当我们用Jar命令打完包后,会在根目录下面创建META-INF目录,该目录下面会有一些对该Jar包信息的描述,其中肯定会有一个MANIFEST.MF文件,该文件包含了该Jar包的版本.创建 ...

  3. Java 打 jar 包时,MANIFEST.MF 文件详解

    具体详情,详见<MANIFEST.MF文件详解> manifest.mf 的编写规则 不能有空行和空格的地方 第一行不可以是空行(第一行的行前不可以有空行),行与行之间不能有空行,每行的行 ...

  4. Springboot读取jar包中的MANIFEST.MF文件内容

    Springboot打包成可执行jar包后,包结构如下所示: 工程编译后的文件都在BOOT-INF/classes目录下,如果需要读取并显示META-INF/MANIFEST.MF文件内容,那么可以用 ...

  5. JAR包中的MANIFEST.MF文件详解以及编写规范

    JAR包中的MANIFEST.MF文件详解以及编写规范 参考百度百科的解释如下: http://baike.baidu.com/item/MANIFEST.MF MANIFEST.MF:这个 mani ...

  6. meta-inf文件夹以及MANIFEST.MF文件的作用

    meta-inf相当于一个信息包,目录中的文件和目录获得Java 2平台的认可与解释,用来配置应用程序.扩展程序.类加载器和服务 manifest.mf文件,在用jar打包时自动生成的. META-I ...

  7. MANIFEST.MF文件详解

    文章目录 一. 一般属性 二. 应用程序相关属性 三. 小程序(Applet)相关属性 四. 扩展标识属性 五. 包扩展属性 六. 签名相关属性 七.自定义属性 JAR 文件是什么? META-INF ...

  8. manifest java_JAR包中的MANIFEST.MF文件详解以及编写规范

    参考百度百科的解释如下: MANIFEST.MF:这个 manifest 文件定义了与扩展和包相关的数据.单词"manifest"的意思是"显示" 打开Java ...

  9. MANIFEST.MF文件

    有时候我们需要在命令行下运行Jar包, 而一个Jar包通常会依赖其他的jar包,这样每次命令行运行时都需要将依赖的jar包classpath, 还有指定main方法的类全限定名称, 特别费尽,最近发现 ...

最新文章

  1. 第五节:框架前期准备篇之锁机制处理并发
  2. 终端到服务器丢包,服务器丢包 ping的时候产生丢包的解决方法
  3. 图形学之开篇概念及综述
  4. 狂神说Java学习笔记 Java基础
  5. 迟到的 cocoapod 版本适配 之网利宝
  6. 成功解决internal/modules/cjs/loader.js:596 throw err; ^ Error: Cannot find module 'express'
  7. kubernetes存储详解
  8. H83601D直插DIP千兆双口网络接口隔离滤波脉冲变压器
  9. android 布局如何居中,Android ConstraintLayout约束布局的居中详解
  10. 备考cfa一、二级的方法和资料
  11. 小米手机 MIUI 国际版/EU 刷机教程
  12. CenterNet( Keypoint Triplets for Object Detection) 学习笔记
  13. 医疗设备维修保养及常见故障维修技术学习
  14. java经纬度工具类
  15. 基于cv2.VideoCapture 和 OpenCV 得到更快的 FPS之Webcam篇
  16. 苹果七绕过基带激活2020_【快讯:苹果135亿的基带订单,高通疑有诈直接拒绝了;网传索尼移动考虑退出东南亚手机市场;黑客成功获取iPhone XS 权限】...
  17. uniapp 小程序 加载显示插屏广告
  18. oracle中start with ... connect by prior的用法(图文并茂,一看就懂!!)
  19. UWB定位项目怎么评估定位基站数量
  20. Keeping A GitHub Fork Updated

热门文章

  1. 吉林全国计算机报名系统入口,http://ncre.jleea.com.cn吉林计算机等级考试报名系统入口...
  2. android软键盘enter键
  3. 使用孪生网络和零样本学习进行文本分类
  4. 厦门大学计算机学院离散数学复试,2019年厦门大学计算机考研复试办法
  5. 【侯捷】C++STL标准库与泛型编程(第二讲)
  6. Windows10如何删除自带输入法,设置默认输入法
  7. 3D角色硬表面建模技巧与思路分享
  8. XTP中CXTPReportControl中合并单元格
  9. Codejock Xtreme ToolkitPro 静态链接XTP库以及皮肤库的使用
  10. 数据杂谈:CIO和CTO的区别(首席信息官首席技术官)