| 文件 | 用途 | 關鍵屬性/內容 |
MANIFEST.MF | 主清單,定義擴展/包元數據 | Main-Class、Class-Path、Sealed、Implementation-Version、Specification-Version |
INDEX.LIST | 包位置索引,jar -i 生成 | 類加載器快速定位類所在 JAR,避免掃描所有 JAR |
xxx.SF | 簽名文件,xxx=簽名者 | 每個條目的摘要值 |
xxx.DSA/RSA/EC | 簽名塊,含公鑰證書鏈 | 驗證完整性與來源 |
services/ | SPI 服務提供者配置 | 文件名=接口全限定名,內容=實現類名列表 |
Manifest 實戰範例
Manifest-Version: 1.0
Created-By: Apache Maven 3.8.6
Built-By: jenkins
Build-Jdk: 17.0.5
Main-Class: com.example.App
Class-Path: lib/dependency1.jar lib/dependency2.jar
Sealed: true
Name: com/example/core/
Specification-Title: Core Library
Specification-Version: 2.1.0
Specification-Vendor: Example Corp.
Implementation-Title: Core Library
Implementation-Version: 2.1.0-SNAPSHOT
Implementation-Vendor: Example Corp.
可執行 JAR 三要素
Main-Class 指定入口
Class-Path 聲明依賴 (相對路徑,空格分隔)
- 啟動:
java -jar app.jar (忽略 -cp)
包密封與版本控制實戰
# 密封整個 JAR (Manifest 主屬性)
Sealed: true
# 密封特定包 (Manifest 個別條目)
Name: com/example/internal/
Sealed: true
# 版本檢查代碼
Package pkg = com.example.Core.class.getPackage();
if (!"2.1.0".equals(pkg.getSpecificationVersion())) {
throw new IllegalStateException("版本不匹配");
}
現代演進:JAR → 模組化 JAR (JDK 9+)
module-info.class 在 JAR 根目錄
- 聲明
requires、exports、opens、uses、provides
jlink 生成精簡運行時映像
- 多版本兼容 JAR:
META-INF/versions/9/、11/ 放置特定版本類
JAR 不是「壓縮包」,而是 Java 生態的「標準貨櫃」。掌握 Manifest、簽名、索引、密封、版本、模組化,才能駕馭類庫發布、應用部署、安全合規的全生命週期。
- 上一篇文章: 基於 XML 的購物車 Java 實現:XMLCart JavaBean 完整源碼與操作指南
- 下一篇文章: Tomcat 核心配置技巧 Top 10:從管理介面到應用部署全解析
Copyright ©
程式碼之家 All Rights Reserved