java中,jar包是我們經常見到的東西,他是一個壓縮文件。jar包跟zip格式的壓縮文件的壓縮機制是相同的,只不過jar包比zip文件多了一個清單文件(META-INF/MANIFEST.MF)。
-----------------------------------------------------------------------------------------------------------------------------------------
一般情況下jar包通常會以一下兩種形式存在:
1.用於項目導入,單純的壓縮文件,裏面有很多的.java,.class文件,導入這樣的jar包後,我們可以在項目中使用該jar包裏提供的一些類,編譯運行時,jvm會自動解壓該jar,這使得他的跨平臺性很好。
2.可執行的jar包,他與上者的主要區別在於,在清單文件(META-INF/MANIFEST.MF)中指定了主函數,告訴編譯器,加載這個jar包先加載哪個類。
他主要在清單文件中添加了行Main-Class:<空格>主類名<回車>。
需要注意的是,這個格式是非常嚴謹的,必須按照以上格式寫,區分大小寫。
------------------------------------------------------------------------------------------------------------------------------------------
下面看一下jar命令的相關信息,我們可以在控制檯輸入jar來查看(前提java環境變量已經配置好):
用法: jar {ctxui}[vfm0Me] [jar-file] [manifest-file] [entry-point] [-C dir] file
s ...
選項包括:
-c 創建新的歸檔文件
-t 列出歸檔目錄
-x 從檔案中提取指定的 (或所有) 文件
-u 更新現有的歸檔文件
-v 在標準輸出中生成詳細輸出
-f 指定歸檔文件名
-m 包含指定清單文件中的清單信息
-e 爲捆綁到可執行 jar 文件的獨立應用程序
指定應用程序入口點
-0 僅存儲; 不使用情況任何 ZIP 壓縮
-M 不創建條目的清單文件
-i 爲指定的 jar 文件生成索引信息
-C 更改爲指定的目錄幷包含其中的文件
如果有任何目錄文件, 則對其進行遞歸處理。
清單文件名, 歸檔文件名和入口點名稱的指定順序
與 'm', 'f' 和 'e' 標記的指定順序相同。
示例 1: 將兩個類文件歸檔到一個名爲 classes.jar 的歸檔文件中:
jar cvf classes.jar Foo.class Bar.class
示例 2: 使用現有的清單文件 'mymanifest' 並
將 foo/ 目錄中的所有文件歸檔到 'classes.jar' 中:
jar cvfm classes.jar mymanifest -C foo/。
------------------------------------------------------------------------------------------------------------------------------------------
以上我們可以看到他的命令格式,以及兩個簡單的例子。
按照上面的介紹,我們可以進行打包可執行jar包了。
1.創建一個文檔(此處爲a.txt),按照Main-Class:<空格>主類名<回車>的格式,指定主類。
2.執行命令 jar cvfm [希望生成的jar包名] [指定主類的文檔] [希望打包的文件夾] 如:jar cvfm test.jar a.txt com 執行完該命令,我們會發現清單文件中多了一行Main-Class: [包名].[主類名]
3.通過jar -jar test.jar去執行該jar包。
------------------------------------------------------------------------------------------------------------------------------------------
大功告成!