MANIFEST.INF!JAR規範中 META-INF 目錄中內容心得。順帶整理了網上資料,提供地址
阿新 • • 發佈:2019-01-05
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
註釋,對產品的說明
Specification 和 Implementation
Specification 是標準。比如 Servlet 標準,可能還有 JDBC 標準。
Implementation 是針對這個標準的產品。
如果沒有特別的名字,其中 -Title 可以用和 Name 一致的內容,比如 Spads Soccer Management
具體來說,有通用的 Title, Version 和 Vendor ;
還有 Implementation-Vendor-Id
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/