
Java 教程
- Java - 首頁
- Java - 概述
- Java - 歷史
- Java - 特性
- Java 與 C++
- JVM - Java 虛擬機器
- Java - JDK 與 JRE 與 JVM
- Java - Hello World 程式
- Java - 環境搭建
- Java - 基本語法
- Java - 變數型別
- Java - 資料型別
- Java - 型別轉換
- Java - Unicode 系統
- Java - 基本運算子
- Java - 註釋
- Java - 使用者輸入
- Java - 日期與時間
Java 控制語句
- Java - 迴圈控制
- Java - 決策制定
- Java - If-else
- Java - Switch
- Java - For 迴圈
- Java - For-Each 迴圈
- Java - While 迴圈
- Java - do-while 迴圈
- Java - Break
- Java - Continue
面向物件程式設計
- Java - OOPs 概念
- Java - 物件與類
- Java - 類屬性
- Java - 類方法
- Java - 方法
- Java - 變數作用域
- Java - 建構函式
- Java - 訪問修飾符
- Java - 繼承
- Java - 聚合
- Java - 多型
- Java - 重寫
- Java - 方法過載
- Java - 動態繫結
- Java - 靜態繫結
- Java - 例項初始化塊
- Java - 抽象
- Java - 封裝
- Java - 介面
- Java - 包
- Java - 內部類
- Java - 靜態類
- Java - 匿名類
- Java - 單例類
- Java - 包裝類
- Java - 列舉
- Java - 列舉建構函式
- Java - 列舉字串
Java 內建類
Java 檔案處理
Java 錯誤與異常
- Java - 異常
- Java - try-catch 塊
- Java - try-with-resources
- Java - 多重 catch 塊
- Java - 巢狀 try 塊
- Java - finally 塊
- Java - throw 異常
- Java - 異常傳播
- Java - 內建異常
- Java - 自定義異常
Java 多執行緒
- Java - 多執行緒
- Java - 執行緒生命週期
- Java - 建立執行緒
- Java - 啟動執行緒
- Java - 加入執行緒
- Java - 執行緒命名
- Java - 執行緒排程器
- Java - 執行緒池
- Java - 主執行緒
- Java - 執行緒優先順序
- Java - 守護執行緒
- Java - 執行緒組
- Java - 關閉鉤子
Java 同步
Java 網路程式設計
- Java - 網路程式設計
- Java - Socket 程式設計
- Java - URL 處理
- Java - URL 類
- Java - URLConnection 類
- Java - HttpURLConnection 類
- Java - Socket 類
- Java - 泛型
Java 集合
Java 介面
Java 資料結構
Java 集合演算法
高階 Java
- Java - 命令列引數
- Java - Lambda 表示式
- Java - 傳送郵件
- Java - Applet 基礎
- Java - Javadoc 註釋
- Java - 自動裝箱和拆箱
- Java - 檔案不匹配方法
- Java - REPL (JShell)
- Java - 多版本 Jar 檔案
- Java - 私有介面方法
- Java - 內部類菱形運算子
- Java - 多解析度影像 API
- Java - 集合工廠方法
- Java - 模組系統
- Java - Nashorn JavaScript
- Java - Optional 類
- Java - 方法引用
- Java - 函式式介面
- Java - 預設方法
- Java - Base64 編碼解碼
- Java - Switch 表示式
- Java - Teeing Collectors
- Java - 微基準測試
- Java - 文字塊
- Java - 動態 CDS 歸檔
- Java - Z 垃圾收集器 (ZGC)
- Java - 空指標異常
- Java - 打包工具
- Java - 密封類
- Java - 記錄類
- Java - 隱藏類
- Java - 模式匹配
- Java - 簡潔數字格式化
- Java - 垃圾收集
- Java - JIT 編譯器
Java 雜項
- Java - 遞迴
- Java - 正則表示式
- Java - 序列化
- Java - 字串
- Java - Process API 改進
- Java - Stream API 改進
- Java - 增強的 @Deprecated 註解
- Java - CompletableFuture API 改進
- Java - 流
- Java - 日期時間 API
- Java 8 - 新特性
- Java 9 - 新特性
- Java 10 - 新特性
- Java 11 - 新特性
- Java 12 - 新特性
- Java 13 - 新特性
- Java 14 - 新特性
- Java 15 - 新特性
- Java 16 - 新特性
Java API 與框架
Java 類引用
- Java - Scanner
- Java - 陣列
- Java - 字串
- Java - Date
- Java - ArrayList
- Java - Vector
- Java - Stack
- Java - PriorityQueue
- Java - LinkedList
- Java - ArrayDeque
- Java - HashMap
- Java - LinkedHashMap
- Java - WeakHashMap
- Java - EnumMap
- Java - TreeMap
- Java - IdentityHashMap
- Java - HashSet
- Java - EnumSet
- Java - LinkedHashSet
- Java - TreeSet
- Java - BitSet
- Java - Dictionary
- Java - Hashtable
- Java - Properties
- Java - Collection
- Java - Array
Java 有用資源
Java - 打包工具
在 Java 14 中,引入了一個新的**打包工具** `jpackage` 來替代 `javapackager`。`javapackager` 是 JavaFX 工具包的一部分,並在 Java 8 中引入。從 Java 11 開始,JavaFX 不再是 Java API 的標準特性,`javapackager` 也就不再是標準發行版的一部分了。`jpackage` 正是為了滿足這一需求而誕生的。`jpackage` 使開發人員能夠將 jar 檔案打包成本機可安裝格式,例如 Windows 的 exe/msi、MacOS 的 pkg/dmg 等等。
開發人員可以使用 `jlink` 將所需的 JDK 模組壓縮到最小模組,並使用 `jpackage` 建立輕量級映象。
`javapackager` 的需求
當軟體需要分發時,首選的方式是向終端使用者提供一個可安裝的軟體包。這個可安裝的軟體包通常包含 JDK、模組、任何依賴檔案和配置,併為使用者提供一種熟悉的方式來安裝軟體。使用者不應該被要求安裝 JRE 或 JDK 作為執行 Java 應用程式的先決條件。`jpackage` 處理所有這些情況,並將所有必需的檔案與 JRE/JDK 一起打包到一個本機安裝程式中。
`javapackager` 的命令列選項
`jpackage` 是一個命令列工具,並提供各種選項來定製可安裝的軟體。以下是 `javapackager` 提供的一些功能:
開發人員可以提供自定義圖示。
開發人員可以提供特定的位置來安裝應用程式。
開發人員可以將應用程式引數傳遞給應用程式,JVM 選項在啟動應用程式時使用。
開發人員可以設定檔案關聯來啟動應用程式。
開發人員可以設定選項來修改特定於平臺的選單組選項以啟動應用程式。
開發人員可以配置多個啟動器來啟動應用程式。
使用 Xcode,也可以簽署捆綁包。但這僅適用於 MacOS。
先決條件
以下是使用 `javapackager` 工具準備可安裝程式的先決條件。
首先需要 JDK 和軟體應用程式。
獲取特定於平臺的打包工具,如下所示:
**Windows** - 要建立 EXE/MSI 可安裝程式,需要 Wix 3.0 或更高版本的第三方庫。
**Ubuntu Linux** - 要建立 RPM、DEB 包,我們需要 fakeroot 包。
**Red Hat Linux** - 要建立 RPM、DEB 包,我們需要 rpm-build 包。
**MacOS** - 我們可以使用 Xcode 命令列工具建立軟體包。`-mac-sign` 選項可用於簽署軟體包,`-icon` 選項可用於提供自定義圖示。
應用程式包應根據平臺準備。對於每個平臺,我們都必須分別執行命令。
建立軟體包
我們可以使用以下命令建立軟體包:
語法
jpackage --input lib \ --name Tester \ --main-jar Tester.jar \ --main-class com.tutorialspoint.Tester \ --type msi \ --java-options '--enable-preview'
其中:
**input** - 包含所需庫的資料夾。
**name** - 可安裝軟體包的名稱。
**main-jar** - 要啟動應用程式的 jar 檔案。
**main-class** - 要啟動的 JAR 中主類的名稱。如果主 JAR 中的 MANIFEST.MF 檔案包含主類名稱,則不需要此選項。
**type** - 可安裝程式的型別。MacOS 為 DMG/PKG,Windows 為 MSI/EXE,Linux 為 DEB/RPM。
**java-options** - Java 執行時的選項。
此命令將建立一個 MSI 檔案,該檔案可以在 Windows 上安裝,並且應用程式可以使用起來像任何其他軟體一樣。
軟體包示例
public class APITester { public static void main(String[] args) { System.out.println("Welcome to TutorialsPoint."); } }
編譯並執行程式
$javac APITester.java $jar cf APITester.jar APITester.class
輸出
對於 Windows 可執行檔案,您需要下載 WiX Toolset v3.11.2 (wix311-binaries.zip) 並將工具包新增到您的 PATH 環境變數中。
建立 jar 包並設定 PATH 環境變數後,將 jar 包放在名為 lib 的資料夾中,然後執行以下命令建立 Windows MSI 安裝程式。
$jpackage --input lib --name APITester --main-jar APITester.jar --main-class APITester --type msi