今天有人问到 META-INF文件夹是干啥的,META-INF文件夹的作用, META-INF文件夹能删吗,还有项目的META-INF下面一般会有个MANIFEST.MF 文件,都是干啥的。

百度搜了一下,基本找不到答案。于是上stakoverflow搜,得到如下答案:

If you remove META-INF from a jar then there is no MANIFEST.MF and so java -jar can't find the main class.

You can create jars without META-INF but when you are going to execute a jar a META-INF/MANIFEST.MF is required.

See http://docs.oracle.com/javase/7/docs/technotes/guides/jar/jar.html

这句英文很简单,简单翻译如下:

如果你将Jar中的META-INF文件夹删除,那么jar文件里边就没有MANIFEST.MF文件。那么,java -jar就找不到main class.

没有META-INF你仍然可以创建一个Jar文件。但是,当你想要执行jar文件的时候,这个jar是需要具备 META-INF/MANIFEST.MF的。

我们在使用eclipse或者myeclipse新建项目之后,在项目中可以找到META-INF文件夹,下面有个MANIFEST.MF。

打开之后发现里边只有:

Manifest-Version: 1.0
Class-Path:

瞬间变有疑问:这么少点信息,有啥作用。为啥上面那段英文说的这个文件这么的不可或缺。

于是我随便在项目的lib中找了一个jar文件commons-io-2.3.jar,打开,把里边的MANIFEST.MF文件拿出来,打开如下:

Manifest-Version: 1.0
Export-Package: org.apache.commons.io.output;version="2.3",org.apache.
commons.io.monitor;version="2.3",org.apache.commons.io.filefilter;ver
sion="2.3",org.apache.commons.io.comparator;version="2.3",org.apache.
commons.io.input;version="2.3",org.apache.commons.io;version="2.3"
Implementation-Title: Commons IO
Built-By: ggregory
Tool: Bnd-1.50.0
Implementation-Vendor: The Apache Software Foundation
Implementation-Vendor-Id: org.apache
Specification-Title: Commons IO
Bundle-License: http://www.apache.org/licenses/LICENSE-2.0.txt
Bundle-SymbolicName: org.apache.commons.io
X-Compile-Target-JDK: 1.6
Implementation-Version: 2.3
Specification-Vendor: The Apache Software Foundation
Bundle-Name: Commons IO
Created-By: Apache Maven Bundle Plugin
X-Compile-Source-JDK: 1.6
Bundle-Vendor: The Apache Software Foundation
Build-Jdk: 1.6.0_31
Bundle-Version: 2.3.0
Bnd-LastModified: 1334069963279
Bundle-ManifestVersion: 2
Bundle-Description: The Commons IO library contains utility classes, s
tream implementations, file filters, file comparators, endian transfo
rmation classes, and much more.
Bundle-DocURL: http://commons.apache.org/io/
Implementation-Build: tags/2.3-RC1@r1311772; 2012-04-10 10:59:15-0400
Specification-Version: 2.3
Include-Resource: META-INF/LICENSE.txt=LICENSE.txt,META-INF/NOTICE.txt
=NOTICE.txt
Archiver-Version: Plexus Archiver

  密密麻麻一大片,是一行行的,类似配置文件,前面一个'key' 后面一个‘value’

具体这些玩意有啥用,META-INF 里边还可以放啥,可击上面文字中提供的的连接。好长一片英文,感兴趣的话,慢慢看吧。

META-INF文件夹是干啥的,META-INF文件夹的作用, META-INF文件夹能删吗的更多相关文章

  1. XCopy复制文件夹命令及参数详解以及xcopy拷贝目录并排除特定文件

    XCOPY是COPY的扩展,可以把指定的目录连文件和目录结构一并拷贝,但不能拷贝系统文件:使用时源盘符.源目标路径名.源文件名至少指定一个:选用/S时对源目录下及其子目录下的所有文件进行COPY.除非 ...

  2. C#使用FileSystemWatcher来监控指定文件夹,并使用TCP/IP协议通过Socket发送到另外指定文件夹

    项目需求: 局域网内有两台电脑,电脑A(Windows系统)主要是负责接收一些文件(远程桌面粘贴.FTP上传.文件夹共享等方式),希望能在A接收文件后自动传输到电脑B(Windows系统)来做一个备份 ...

  3. [转帖]XCopy复制文件夹命令及参数详解以及xcopy拷贝目录并排除特定文件

    XCopy复制文件夹命令及参数详解以及xcopy拷贝目录并排除特定文件 https://www.cnblogs.com/smartsmile/p/7665979.html xcopy dirA dir ...

  4. Django配置静态文件(CSS\js)及Django调用JS、CSS、图片等静态文件

    1 新建一项目: root@python:django-admin.py startproject csstest root@python:cd csstest root@python:ls csst ...

  5. Java处理ZIP文件的解决方案——Zip4J(不解压直接通过InputStream形式读取其中的文件,解决中文乱码)

    一.JDK内置操作Zip文件其实,在JDK中已经存在操作ZIP的工具类:ZipInputStream. 基本使用: public static Map<String, String> re ...

  6. 文件的上传(1)(表单上传和ajax文件异步上传)

    文件的上传(表单上传和ajax文件异步上传) 项目中用户上传总是少不了的,下面就主要的列举一下表单上传和ajax上传!注意: context.Request.Files不适合对大文件进行操作,下面列举 ...

  7. Android项目实战(二十四):项目包成jar文件,并且将工程中引用的jar一起打入新的jar文件中

    前言: 关于.jar文件: 平时我们Android项目开发中经常会用到第三方的.jar文件. 其实.jar文件就是一个类似.zip文件的压缩包,里面包含了一些源代码,注意的是.jar不包含资源文件(r ...

  8. Zip文件压缩(加密||非加密||压缩指定目录||压缩目录下的单个文件||根据路径压缩||根据流压缩)

    1.写入Excel,并加密压缩.不保存文件 String dcxh = String.format("%03d", keyValue); String folderFileName ...

  9. php如何将数组保存为文件的方法? 三个方法让你快速把数组保存成为文件存储

    php 缓存数组形式的变量,实际上就是将 php 将数组写入到一个文本文件或者后缀名为 .php 存储起来,使用的时候直接调用这个文件.那么如何使用 php 将数组保存为文本格式的文件呢?下面分享三种 ...

随机推荐

  1. 一个ubuntu phper的自我修养(ubuntu安装)

    ubuntu安装篇 一.ubuntu下载 到ubuntu官网下载适合自己电脑配置的系统版本,此处不做展开. 二.制作USB启动盘 在windows下制作USB启动盘,工具是universal usb ...

  2. 向STM32 CUBE MX 生成的工程里移植stemwin

    我参考这个文章做的: http://bbs.armfly.com/read.php?tid=1678 这次添加的是没有os的版本 另外跟用不用hal库没关系 1. keil自带了emwin 2. 用c ...

  3. Uva 11354 LCA 倍增祖先

    题目链接:https://vjudge.net/contest/144221#problem/B 题意:找一条从 s 到 t  的路,使得瓶颈路最小. 点的数目是10^4,如果向之前的方案求 maxc ...

  4. HTMl链接- target/ name

    下面解释一下链接标签的另外两个属性:target和name HTML 链接 - target 属性 使用 Target 属性,你可以定义被链接的文档在何处显示. 下面的这行会在新窗口打开文档: < ...

  5. 使用Python调用Flickr API抓取图片数据

    Flickr是雅虎旗下的图片分享网站,上面有全世界网友分享的大量精彩图片,被认为是专业的图片网站.其API也很友好,可以实现多种功能.这里我使用了Python调用其API获得了大量的照片数据.需要注意 ...

  6. Swift高级语法学习总结(转)

    Swift高级语法学习总结 1.函数 1.1 func funcNmae()->(){} 这样就定义了一个函数,它的参数为空,返回值为空,如果有参数和返回值直接写在两个括号里就可以了 1.2 参 ...

  7. 关于IONIC 报错 XX is not a function

    刚开始 做一个项目,总是报错"XX is not  a function"   最后发现 原因 ,   原来是 服务的 注入位置 有问题. angular.module(" ...

  8. Apache配置文件讲解

        持续作用扩展自 HTTP/1.0 和 HTTP/1.1 的长连接特性.提供了长效的 HTTP 会话,用以在同 一个 TCP 连接中进行多次请求. 在某些情况下, 这样的方式会对包含大量图片的 ...

  9. jqury 右击事件插件

    在有些时候,网页中需要给一些标签对象加入右击的事件,在网上看了一些小的插件,但是不能根据this获取到当前的标签.所以相对他们进行改进一下.自己写了一个小的js右击事件.废话不多说了,看代码. $(f ...

  10. d3.js读书笔记-2

    比例尺 比例尺基本内容 比例尺是一组把输入域映射为输出范围的函数.任意数据集中的值不可能恰好与图表中的像素尺度一一对应.比例尺就是把这些数据值映射为可视化图形中使用的新值的便捷手段.D3的比例尺就是那 ...