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

JAR 文件深度解析:從應用程式打包到擴展類庫部署

     編輯:Java 相關知識

JAR 文件雙重身份

JAR(Java ARchive)基於 ZIP 格式,服務於兩大核心場景:

  1. 應用程式分發:打包主類與依賴,透過 java -jar 或雙擊啟動。
  2. 類庫部署:打包工具類/框架類,置於 JRE/lib/ext/(舊版)或模組路徑/類路徑,供其他程式復用。

場景一:應用程式打包與執行

1. 編寫 Manifest(Mymoon.mf)

Manifest-Version: 1.0
Main-Class: A
Created-By: 1.8.0_XXX (Oracle Corporation)

格式鐵律:冒號後恰好一個空格,每行以換行符結尾。

2. 生成 JAR

jar cfm Tom.jar Mymoon.mf A.class B.class
  • c create、f file、m manifest
  • 類文件順序無關緊要,JVM 依 Main-Class 尋找入口

3. 執行與發布陷阱

java -jar Tom.jar
# 或雙擊(需關聯 javaw.exe)

WinRAR 關聯搶占問題:安裝解壓軟體後 .jar 被關聯為壓縮包,導致雙擊無法執行。
解決方案:編寫啟動腳本 Tom.bat:

@echo off
javaw -jar Tom.jar

發布時附帶 .bat/.sh 腳本,用戶點擊腳本即可穩定啟動。

場景二:類庫打包部署至擴展目錄

1. 準備類文件

// Test1.java
public class Test1 {
    public void fTest1() { System.out.println("I am a method In Test1 class"); }
}

// Test2.java
public class Test2 {
    public void fTest2() { System.out.println("I am a method In Test2 class"); }
}

2. 編寫 Manifest(moon.mf)

Manifest-Version: 1.0
Class: Test1 Test2
Created-By: 1.8.0_XXX (Oracle Corporation)

Class 屬性聲明導出類,非強制但利於文檔化與工具索引。

3. 打包並部署

jar cfm Jerry.jar moon.mf Test1.class Test2.class
copy Jerry.jar %JAVA_HOME%\jre\lib\ext\

部署後,同一 JRE 下所有程式均可直接 new Test1() 使用,無需配置類路徑。

⚠️ 現代化警示

  • JDK 9+ 移除了 jre/lib/ext 機制,改用模組系統(JPMS)與 --module-path。
  • 極易造成「JAR 地獄」:版本衝突、類載入器洩漏、安全風險。
  • 推薦做法:Maven/Gradle 管理依賴,構建 Fat JAR 或模組化 JAR(module-info.java),避免全域擴展目錄污染。

JAR 核心命令速查表

操作命令說明
創建jar cf jar-file input-files基本打包
帶 Manifestjar cfm jar-file manifest-file input-files可執行 JAR
更新jar uf jar-file input-files增量更新
查看目錄jar tf jar-file列出所有條目
解壓jar xf jar-file [files]解壓全部或指定文件
查看 Manifestjar xf jar-file META-INF/MANIFEST.MF提取清單文件
簽名jarsigner -keystore ks.jar myapp.jar alias數位簽名驗證完整性
驗證簽名jarsigner -verify myapp.jar校驗簽名有效性

Manifest 關鍵屬性速查

屬性用途範例
Manifest-Version清單版本(固定 1.0)1.0
Main-Class應用入口主類com.app.Main
Class-Path相對路徑依賴列表(空格分隔)lib/a.jar lib/b.jar
Created-By生成工具/版本Maven 3.8 / JDK 17
Sealed密封包(防止類被擴展)true/false
Implementation-Version實現版本號1.2.3
Specification-Version規範版本號2.0

總結

JAR 是 Java 生態的基礎分發單元。理解 Main-Class 啟動機制、Class-Path 依賴聲明、ext 目錄擴展機制(及其在模組化時代的替代方案),能讓你從容應對從桌面工具到企業級類庫的各種打包部署場景。現代專案請優先採用構建工具自動化管理,避免手動維護 Manifest 產生的低級錯誤。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved