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

Java 打包可執行 JAR 並引用第三方庫的完整指南

     編輯:Java 相關知識

核心問題:Main-Class 與 Class-Path 配置

使用 Eclipse 導出 Runnable JAR 時,若報 no main manifest attribute 或 NoClassDefFoundError,根因在於 META-INF/MANIFEST.MF 缺少關鍵屬性。

1. 指定主類入口:Main-Class

編輯 MANIFEST.MF,添加:

Main-Class: com.example.MainClass

關鍵規則:

  • Main-Class: 後必須有一個空格,否則解析失敗。
  • 類名為全限定名,不含 .class 或 .java 後綴。
  • 文件必須以換行符結尾(光標停在下一行),否則最後一行配置不生效。

2. 引用第三方 JAR:Class-Path

當專案依賴外部庫(如 activemq-all-5.12.1.jar)時,需配置:

Class-Path: lib/activemq-all-5.12.1.jar

部署結構要求:

部署目錄/
├── myapp.jar
└── lib/
    └── activemq-all-5.12.1.jar
  • Class-Path 路徑為相對於 JAR 所在目錄的相對路徑。
  • 多個 JAR 以空格分隔:Class-Path: lib/a.jar lib/b.jar
  • 同樣需要空格分隔鍵值及結尾換行。

完整 MANIFEST.MF 範例

Manifest-Version: 1.0
Main-Class: com.example.MainClass
Class-Path: lib/activemq-all-5.12.1.jar lib/slf4j-api-1.7.25.jar


Eclipse 導出可執行 JAR 的正確姿勢

  1. 右鍵專案 → Export → Java/Runnable JAR file
  2. Launch configuration 選擇主類
  3. Library handling 選擇 Copy required libraries into a sub-folder next to the generated JAR(自動建立 lib 目錄並複製依賴)
  4. 完成導出,Eclipse 會自動生成正確的 MANIFEST.MF

命令行手動打包(進階)

# 1. 編譯
javac -d out -cp "lib/*" src/com/example/*.java

# 2. 建立 MANIFEST.MF
echo "Main-Class: com.example.MainClass" > manifest.txt
echo "Class-Path: lib/activemq-all-5.12.1.jar" >> manifest.txt
echo "" >> manifest.txt  # 關鍵:結尾換行

# 3. 打包
jar cfm myapp.jar manifest.txt -C out .

# 4. 執行
java -jar myapp.jar

常見坑點總結

錯誤現象原因解決
no main manifest attribute缺少 Main-Class 或格式錯誤檢查冒號後空格、結尾換行
NoClassDefFoundError缺少 Class-Path 或庫路徑錯誤確認 lib 目錄存在、路徑相對正確
ClassNotFoundException依賴傳遞性缺失將所有傳遞依賴加入 Class-Path
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved