2018年11月18日 星期日

Java SE 入門教學 - 打包JAR

更新時間:11/18/2018

前言

要完成一個 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),即可讓使用者方便操作唷!





沒有留言:

張貼留言