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

JAR、WAR、EAR 三大 Java 打包格式深度對比:結構、用途與部署實戰

     編輯:Java 程式設計入門

核心定位一覽

格式全稱核心內容部署容器層級
JARJava Archive.class、.properties、資源文件、META-INF/MANIFEST.MFJVM / 應用服務器 (庫)最小單元
WARWeb ArchiveServlet、JSP、HTML/JS/CSS、JAR庫、web.xml、圖片等 Web 資源Servlet 容器Web 應用
EAREnterprise Archive多個 JAR (EJB)、多個 WAR、application.xml、安全角色EJB 容器 / 全功能 Java EE 服務器企業級應用

目錄結構對比


JAR:
my-lib.jar
├── com/example/Util.class
├── config.properties
└── META-INF/MANIFEST.MF

WAR:
my-web.war
├── index.jsp
├── WEB-INF/
│   ├── web.xml
│   ├── classes/          # 編譯後 .class
│   │   └── com/example/Controller.class
│   └── lib/              # 依賴 JAR
│       └── gson-2.8.6.jar
└── META-INF/MANIFEST.MF

EAR:
my-app.ear
├── META-INF/
│   └── application.xml   # 核心部署描述符
├── ejb-module.jar        # EJB JAR
├── web-module.war        # Web WAR
└── util-lib.jar          # 共用庫 JAR

application.xml 關鍵配置 (EAR 核心)




    MyEnterpriseApp
    
    
    
        customer-ejb.jar
    
    
    
    
        
            web.war
            /myapp  
        
    
    
    
    
        admin
    

命令行打包實戰

JAR 打包


# 創建 (c) 詳情 (v) 文件 (f)
jar cvf mylib.jar -C build/classes .  # 從 build/classes 打包所有

# 查看 (t)
jar tf mylib.jar

# 解壓 (x)
jar xf mylib.jar

# 可運行 JAR (指定 Main-Class)
jar cvfe myapp.jar com.example.Main -C build/classes .
java -jar myapp.jar

WAR 打包


# 在 Web 根目錄下 (包含 WEB-INF)
jar cvf myweb.war .

# 或指定目錄
jar cvf myweb.war -C webapp_root .

EAR 打包


# 1. 先打好 WAR 和 JAR
# 2. 準備 application.xml 放入 META-INF/
# 3. 打包 EAR
jar cvf myapp.ear myweb.war myejb.jar META-INF/application.xml

WinRAR 替代方案

  • 選擇 ZIP 格式 壓縮
  • 修改後綴為 .war / .ear
  • 區別:jar 命令自動生成 META-INF/MANIFEST.MF,WinRAR 不會

何時用 WAR vs JAR?

開發/調試階段:直接部署爆炸目錄 (Tomcat webapps/目錄),熱加載友好,別打 WAR

生產發布/交付:打包為 WAR,單文件部署、版本管理、CI/CD 流水線友好

通用工具類/庫:打 JAR,供多項目依賴 (Maven/Gradle 坐標)

現代構建工具視角


# Maven
jar   
war
ear

# Gradle
plugins { id 'java' }        // JAR
plugins { id 'war' }         // WAR
plugins { id 'ear' }         // EAR

Maven/Gradle 自動處理依賴傳遞、清單屬性、目錄結構,強烈建議使用構建工具而非手動 jar 命令。

JET 編譯成 EXE 避坑

Excelsior JET (現已停止更新) 可將 Java 編譯為原生 EXE,但:

  • 商業收費
  • 不支持所有 Java 特性 (反射、動態加載受限)
  • 性能未必優於 JIT 編譯的 JVM
  • 推薦:可運行 JAR + jlink 定製 JRE 或 GraalVM Native Image (現代方案)

Tomcat 部署 WAR 實戰

  1. 將 myweb.war 放入 $CATALINA_HOME/webapps/
  2. 啟動 Tomcat,自動解壓為同名目錄 myweb/
  3. 訪問 https://localhost:8080/myweb/
  4. 生產環境建議:關閉 autoDeploy、unpackWARs=false,手動解壓管理

總結

JAR = 庫/模塊,WAR = Web 應用,EAR = 企業級組合。現代微服務架構下,獨立可運行 JAR (Spring Boot Fat JAR) 逐漸取代傳統 WAR/EAR 部署模式,但理解三者結構對維護舊系統、Java EE 認證仍至關重要。

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