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

Java 生成可執行 JAR 包完整指南

     編輯:Java 相關知識

為什麼需要可執行 JAR?

Java 應用編譯後產生一堆 .class 文件,運行時需設置 classpath、輸入 java 全限定類名,對用戶不友好。可執行 JAR 封裝所有依賴與啟動信息,用戶雙擊或 java -jar app.jar 即可運行,保留跨平台特性。

JAR 文件結構解析

JAR 本質是 ZIP 格式,唯一區別在於包含 META-INF/MANIFEST.MF 清單文件。

test.jar
├── META-INF/
│   └── MANIFEST.MF      ← 關鍵:指定 Main-Class
└── test/
    └── Test.class

手動創建可執行 JAR 步驟

  1. 準備清單文件 manifest.mf(注意最後必須有換行):
    Main-Class: test.Test
  2. 目錄結構:
    ├── manifest.mf
    └── test/
        └── Test.class
  3. 執行打包命令(在父目錄下):
    jar cvfm test.jar manifest.mf test
    • c 創建、v 顯示過程、f 指定輸出文件、m 引入清單文件
  4. 驗證運行:
    java -jar test.jar

關鍵注意點

  • 包結構必須完整:JAR 內目錄需與包名一致(如 test/Test.class)。
  • Main-Class 必須是全限定名:包含包名(test.Test)。
  • 打包前先能直接運行:確保 java test.Test 在 classpath 正確時能跑通。
  • Windows 雙擊運行:安裝 JRE 後 .jar 關聯 javaw.exe,無控制台窗口;需控制台用 java -jar。

進階:Maven/Gradle 自動化打包

Maven (maven-jar-plugin + maven-shade-plugin)

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <configuration>
        <archive>
            <manifest>
                <mainClass>com.example.Main</mainClass>
            </manifest>
        </archive>
    </configuration>
</plugin>
<!-- 含依賴的 fat-jar -->
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <executions>
        <execution>
            <phase>package</phase>
            <goals><goal>shade</goal></goals>
            <configuration>
                <transformers>
                    <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                        <mainClass>com.example.Main</mainClass>
                    </transformer>
                </transformers>
            </configuration>
        </execution>
    </executions>
</plugin>

Gradle

jar {
    manifest {
        attributes 'Main-Class': 'com.example.Main'
    }
    from { configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) } } // fat-jar
}

總結

掌握手動 jar cvfm 命令是理解 JAR 機制的基礎;實際項目中強烈建議用構建工具自動化生成 Fat JAR,簡化部署與分發。

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