前言
要完成一個 Java 專案,勢必得分好幾個 Class 撰寫。但是當這個 Java 專案完成後,要如何拿給使用者執行呢?總不能讓使用者自己一個一個去試這堆 Class 中到底哪個是擁有程式進入點的 Main Class 吧?Java JDK 提供了將 .class 打包為 .jar 的指令,只要安裝好 JDK 後就可以使用「jar」指令來將 class 檔案打包為以 ZIP 格式壓縮的 JAR 檔案,之後將這 JAR 檔案拿到任何裝有 JRE 的作業系統上,都可以使用「java -jar」指令來執行。
一、JAR(檔案格式)
在軟體領域,JAR 檔案(Java 歸檔,英語:Java ARchive)是一種軟體包檔案格式,通常用於聚合大量的 Java 類別檔案、相關的元資料和資源(文字、圖片等)檔案到一個檔案,以便分發 Java 平台應用軟體或庫。
JAR 文件格式提供了許多好處:
- 安全性:您可以對 JAR 文件的內容進行數字簽名(digitally sign)。然後,識別您的簽名的用戶可以選擇授予您原本不具備的軟件安全權限。
- 減少下載時間:如果您的 applet 捆綁在 JAR 文件中,則可以在單個 HTTP 事務中將 applet 的類文件和相關資源下載到瀏覽器,而無需為每個文件打開新連接。
- 壓縮:JAR 格式允許您壓縮文件以實現高效存儲。
- 擴展包裝:擴展框架提供了一種向Java核心平台添加功能的方法,JAR文件格式定義了擴展的包裝。通過使用JAR文件格式,您也可以將軟件轉換為擴展名。
- 套件密封:可以選擇密封存儲在 JAR 文件中的套件,以便套件可以強制實現版本一致性。在 JAR 文件中封裝套件意味著必須在同一個 JAR 文件中找到該套件中定義的所有類。
- 套件版本控制:JAR 文件可以保存有關其包含的文件的數據,例如供應商和版本信息。
- 可移植性:處理 JAR 文件的機制是 Java 平台核心 API 的標準部分。
常見的 JAR 文件操作:
操作說明 | 指令 |
---|---|
建立 JAR 檔案 | jar cf jar-file input-file(s) |
查看 JAR 檔案的內容 | jar tf jar-file |
提取 JAR 檔案的內容 | jar xf jar-file |
從 JAR 檔案中提取特定文件 | jar xf jar-file archived-file(s) |
執行打包為 JAR 檔案的應用程序 (需要 Main-class manifest header) |
java -jar app.jar |
調用打包為 JAR 檔案的 applet |
<applet code=AppletClassName.class archive="JarFileName.jar" width=width height=height> </applet> |
JAR 命令用法:
用法: jar {ctxui}[vfmn0PMe] [jar-file] [manifest-file] [entry-point] [-C dir] 檔案 ...
選項:
參數選項 | 說明 |
---|---|
-c | 建立新的歸檔 |
-t | 列出歸檔的目錄 |
-x | 從歸檔中擷取指定 (或所有) 檔案 |
-u | 更新現有歸檔 |
-v | 在標準輸出中產生詳細輸出 |
-f | 指定歸檔檔案名稱 |
-m | 包含指定資訊清單中的資訊清單資訊 |
-n | 在建立新歸檔之後執行 Pack200 正規化 |
-e | 為已隨附於可執行 jar 檔案中的獨立應用程式指定應用程式進入點 |
-0 | 僅儲存; 不使用 ZIP 壓縮方式 |
-P | 保留檔案名稱前面的 '/' (絕對路徑) 和 ".." (上層目錄) 元件 |
-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/ .
二、壓縮封裝程式檔
建立 java 程式 → 編譯 java 程式 → 建立 manifest.txt → 壓縮封裝程式檔 → 執行程式檔
2.1 建立 manifest.txt
上一篇有建立一個範例,使用 javac -d 指令把所有 .java 檔案全部編譯到另一個資料夾下。在 c:\JavaCode\shapePackages2 資料夾新增 manifest.txt 文件。
格式
2.2 壓縮封裝程式檔
程式檔案越大,壓縮比率越高
▼ 執行壓縮檔
指令:java -jar 壓縮檔名稱.jar
三、製作點兩下即可執行的檔案
如果您使用的是 Unix 作業系統,則在 command shell 中輸入 "chmod a+x .sh副檔名"。
如果您使用是 Windows 作業系統,可以使用 (1)批次檔 .bat (2)執行檔 .exe。
這邊只介紹 Windows 作業系統的批次檔與執行檔。
3.1 批次檔
把執行 jar 的指令,儲存成 .bat 檔案,並放在與 jar 檔案相同的資料夾內。
▼ 雙擊 run.bat 批次檔
Windows 作業系統會使用 cmd.exe 去執行批次檔內的指令。
3.2 執行檔
使用 Dev-C++ 之類的可產生 .exe 檔案的編譯軟體。如何安裝 Dev-C++,請參閱 安裝 Dev-C++。
▼ 開啟 Dev-C++
檔案 → 開新檔案 → 原始碼
打上 C/C++ 程式碼,使用 "system" 指令,如果操作系統允許,我們可以執行任何可以在終端上運行的命令。
▼ 編寫後存儲檔案
▼ 編譯程式碼
產生出的 .exe 執行檔,放在與 .jar 相同的資料夾下。
雙擊 run.exe,執行程式。
▼ 執行結果
3.3 發布(Release)
▼ 資源檔 + 批次檔
▼ 資源檔 + 執行檔
四、總結
如果想把自己寫好的程式丟給別人執行,首先打包成 JAR 檔案並在 JAR 檔旁邊加入批次檔(Batch File)或執行檔(Executable File),即可讓使用者方便操作唷!
沒有留言:
張貼留言