首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 程式設計入門

JAR 文件格式深度解析:安全簽名、索引加速、包密封、版本控制與模組化部署

     編輯:Java 程式設計入門

JAR 本質

  • 基於 ZIP 格式,聚合多文件為單一存儲單元
  • 超越壓縮:部署單元、庫封裝、組件/插件載體、工具鏈直讀
  • 特殊條目:META-INF/MANIFEST.MF、INDEX.LIST、簽名文件

七大核心優勢

壓縮 vs 不壓縮權衡

  • 壓縮:網絡傳輸快,載入時需解壓 (CPU/延遲)
  • 不壓縮:類載入快 (無解壓),下載慢
  • 策略:Applet/Web Start 壓縮;本地應用/服務端 不壓縮 (jar -0)

META-INF 目錄權威指南

特性說明傳統 ZIP/TAR 差異
安全簽名數字簽名內容,工具驗證授予特權、檢測篡改無簽名機制
減少下載單 HTTP 事務下載所有類/資源,無需多連接逐文件下載
壓縮存儲可選壓縮 (預設開啟),提升存儲效率同
擴展機制Java Extensions Framework 載體 (Java 3D, JavaMail)無標準化
包密封Sealed: true 強制包內所有類在同一 JAR,防分裂/偽造無概念
版本資訊Manifest 記錄廠商、版本、構建號、依賴無標準
可移植 APIjava.util.jar 核心庫標準化操作平台相關

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 三要素

  1. Main-Class 指定入口
  2. Class-Path 聲明依賴 (相對路徑,空格分隔)
  3. 啟動: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、簽名、索引、密封、版本、模組化,才能駕馭類庫發布、應用部署、安全合規的全生命週期。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
文件用途關鍵屬性/內容
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 服務提供者配置文件名=接口全限定名,內容=實現類名列表