一、前言
通過執行形如 jar -cvf src.jar src 命令將多個.class文件打包成JAR包時,你會發現JAR包中除了src目錄外還多了個MATE-INF/MAINFEST.MF,那是為什么呢?
其實關于JAR包的描述信息、啟動時的配置信息和安全性信息等均保存在META-INF下,因此了解META-INF目錄對發布、部署十分重要的哦!下面僅為部分內容的整理,待日后深入實踐后再補充完整。官方文檔為:http://docs.oracle.com/javase/7/docs/technotes/guides/jar/jar.html
二、META-INF/MAINFEST.MF清單文件組成元素
META-INF/MAINFEST.MF清單文件由1個 main-section 和0到N個 individual-section 組成,而每個section中含有多個attribute組成,其中 main-section 中的attribute命名為 main-attribute ,而 individual-section 中的attribute命名為 perentry-attribute 。
各個attribute間使用<CR><LF>作為分隔符(Unix下則使用<LF>作為分隔符,Mac下則使用<CR>作為分隔符)。
individual-section 以名為 Name 的 perentry-attribute 來標識該區域,且作為該區域的起始行。
示例:
Manifest-Version: 1.0 Created-By: 1.2 (Sun Microsystems Inc.) Sealed: true Name: foo/bar/ Sealed: false
main-section 用于描述JAR包的安全、配置信息,和對JAR包內所有包和文件的默認信息。
每個 individual-section 用于描述JAR包中單個包或文件,但不是JAR包中的每個包和文件都必須配置 individual-section ,但對于需要被簽名的文件就必須配置對應的 individual-section 了。
三、 main-attribute 詳解
1. 常規屬性
Mainfest-Version: JAR版本號 Created-By: 生產者 Signature-Version: 簽名版本 Class-Path: 依賴項列表,若存在多個依賴項時則采用空格分隔。依賴項路徑為以JAR包路徑為參考系的相對路徑
2. 可執行的JAR包屬性
Main-Class: main函數所在的全限定類名
四、 perentry-attribute 詳解
1. Name屬性, individual-section 的起始屬性,包命名規范形如:com/test/myapp/,文件命名規范形如:com/test/myapp/MyApp.class。
2. 定義文件內容
Content-Type: MIME類型(格式為:type/subtype。例如,image/jpeg)
五、注意事項
1. 鍵值對獨立占據一行或多行;
2. 每行最大長度為72個字符;
3. 每行的最后一個字符必須以回車符換行符結尾,而且回車符換行符不能有空格(使用正則表達式表達每行規范就是/^.+\S\r\n$/);
4. 若鍵值對獨立占據多行,那么從第二行起,必須以一個或以上的空格開頭(使用正則表達式表達第二行及其余行的規范就是/^[ ]{1,}.+\S\r\n$/)。
尊重原創,轉載請注明來自:http://www.cnblogs.com/fsjohnhuang/p/4046856.html ^_^肥仔John
參考
http://blog.csdn.net/zhifeiyu2008/article/details/8829637
http://docs.oracle.com/javase/7/docs/technotes/guides/jar/jar.html
文章列表