1. 程式人生 > >MANIFEST.INF!JAR規範中 META-INF 目錄中內容心得。順帶整理了網上資料,提供地址

MANIFEST.INF!JAR規範中 META-INF 目錄中內容心得。順帶整理了網上資料,提供地址

Java 產品打包成 JAR 檔案,其中會在 META-INF 目錄下邊存在宣告檔案 MANIFEST.MF 。此檔案內容為

KEY: VALUE ,這樣的一行行內容。以下整理總結了各種標準規範中指定的 KEY 含義。


Manifest-Version
    必有,但應該不用指定
Ant-Version
    如果使用 Ant 的話,會由 Ant 自己加進來
Created-By: 1.6.0-b105 (Sun Microsystems Inc.)
    如果使用 Ant 的話,會自動增加一個 Sun 的版本
Built-By
    編譯的人名,最好能是英文吧……
Extension-Name
    Jar檔案的標識。如果 Java 程式包符合規範的話,包(package)名應該符合這樣的規則。
    域名反序.專案名甲.模組名甲.xxx
    比如一個完整類全名:cn.spads.soccerms.data.dao.RamMatchDao
    如果是一個模組封裝成 .jar 的話,會存在其它任何 .jar 包都絕不可能出現這樣的包:
    cn.spads.soccerms.data.*
    於是,可以認為 cn.spads.soccerms.data 是當下這個 .jar 包所獨有的 Java 類包名字首。
    於是用詞作為 .jar 檔案的唯一標識,非常合適。
Name

    簽名用的“姓名”,推薦將產品名稱放在這裡,或者是產品模組的名稱。
Comment
    註釋,對產品的說明
SpecificationImplementation
    Specification 是標準。比如 Servlet 標準,可能還有 JDBC 標準。
    Implementation 是針對這個標準的產品。
    如果沒有特別的名字,其中 -Title 可以用和 Name 一致的內容,比如 Spads Soccer Management
    具體來說,有通用的 Title, VersionVendor
    還有 Implementation-Vendor-Id
Implementation-URL
Sealed

    只有 true 和 false 二種值。
    其中 true 意味著此 .jar 包拒絕別的 .jar 包裡邊的程式直接載入當前 .jar 包裡邊的類。
    對於元件型 .jar 包,應該是 false ;對於封裝的 Java 應用,可以考慮用 true 。
Class-Path
    每個類路徑用空格分隔,同時換行的話要以空格作為行首第一個字元。
    此類路徑的基準是當前 .jar 檔案所在目錄。類路徑應該是以此為基準的相對路徑。
    比如存在檔案結構:
    SoccerMS [目錄]
        soccer-ms-1.1.0.jar
        lib [目錄]
            mysql-connector-java-5.1.18-bin.jar
            postgresql-9.1-901.jdbc4.jar
    那麼 soccer-ms-1.1.0.jar 中 MANIFEST.MF
Main-Class

    一定要寫類全名。此類中應包含 static public void main(String[] xxx) 方法,即主方法。
    然後可以通過命令列的 java -jar xxxx.jar 來執行 .jar 檔案。


實際操作中,一個 .jar 包很可能實現了很多規範。於是 MANIFEST.MF 會有如下集中的段落:
############ 第 1 份規範 ###########
Specification-Title: Java API for XML Processing
Specification-Vendor: Sun Microsystems Inc.
Specification-Version: 1.3

Name: org/apache/xalan/
Comment: Main Xalan engine implementing TrAX/JAXP
Implementation-Title: org.apache.xalan
Implementation-Version: @[email protected]
Implementation-Vendor: Apache Software Foundation
Implementation-URL: http://xml.apache.org/xalan-j/

Name: org/apache/xpath/
Comment: XPath engine
Implementation-Title: org.apache.xpath
Implementation-Version: @[email protected]
Implementation-Vendor: Apache Software Foundation
Implementation-URL: http://xml.apache.org/xalan-j/

############ 第 2 份規範 ###########
Specification-Title: Runtime component of JCup
Specification-Vendor: Princeton University
Specification-Version: 0.10k

Name: java_cup/runtime/
Comment: Runtime component of JCup
Implementation-Title: runtime
Implementation-Version: @[email protected]
Implementation-Vendor: Princeton University
Implementation-URL: http://www.cs.princeton.edu/~appel/modern/java/CUP/ 



對於多段規範被實現,每個規範被多個部分聯合實現,可以參看下邊的例子,是一個很完整的例子。
http://www.oschina.net/code/explore/xalan/xalan-j_2_7_1/src/MANIFEST.MF


另外可以去看看以下這篇帖子,其中講到了手動編寫 MANIFEST.MF 檔案的一些心得。
http://hi.baidu.com/lkdlhw_2000/blog/item/195519663df40920aa184ceb.html

這篇帖子在網上廣泛流傳,為防止地址打不開,給幾個格式比較好的轉載:
http://happysky.iteye.com/blog/391610
http://blog.163.com/shucker_gzb/blog/static/64514485200951815712456/