JAR 本質為 ZIP 格式的 class 檔案封裝,廣泛相容各類工具。但 ZIP 本身無法表達應用程式中繼資料,故引入 META-INF/MANIFEST.MF 提供:
預設 Manifest 僅含版本與建構工具資訊,實用性有限:
Manifest-Version: 1.0
Created-By: 1.4.0-beta (Sun Microsystems Inc.)
屬性名: 屬性值命令列:
jar cvfm myapp.jar myapp.mf -C classdir .
Ant 建構:
<target name="jar">
<jar jarfile="myapp.jar" manifest="myapp.mf">
<fileset dir="classdir" includes="**/*.class"/>
</jar>
</target>
Manifest-Version: 1.0
Created-By: JDJ example
Main-Class: com.example.myapp.MyAppMain
啟動指令從 java -classpath myapp.jar com.example.myapp.MyAppMain 簡化為 java -jar myapp.jar。
Manifest-Version: 1.0
Main-Class: com.example.myapp.MyAppMain
Class-Path: mail.jar activation.jar
關鍵優勢:
/(跨平台相容)%20)策略:共享類別打包為 myapplib.jar,不同進入點分別打包:
# myapplib.jar
Manifest-Version: 1.0
Class-Path: mail.jar activation.jar
# myappconsole.jar
Manifest-Version: 1.0
Class-Path: myapplib.jar
Main-Class: com.example.myapp.MyAppMain
# myappadmin.jar
Manifest-Version: 1.0
Class-Path: myapplib.jar
Main-Class: com.example.myapp.MyAdminTool
Name: com/example/myapp/
Specification-Title: MyApp
Specification-Version: 2.4
Specification-Vendor: example.com
Implementation-Title: com.example.myapp
Implementation-Version: 2002-03-05-A
Implementation-Vendor: example.com
Package.getPackages():取得所有已定義套件Package.getPackage(String name):依名稱取得套件Class.getPackage():取得類別所屬套件注意:套件下無類別被載入時無法取得 Package 物件。
Manifest-VersionClass-Path 路徑統一用 / 分隔目錄/ 分隔且以 / 結尾(如 com/example/myapp/).class 結尾