一個java專案引入jar包後,再把這個java專案打包,遇到的jar找不到的問題
阿新 • • 發佈:2018-12-09
參考文章:
步驟1:準備主清單檔案 “MANIFEST.MF”,
由於是打包引用了第三方jar包的Java專案,故需要自定義配置檔案MANIFEST.MF,在該專案下建立檔案MANIFEST.MF,內容如下:
Manifest-Version: 1.0
Class-Path: lib/commons-codec.jar lib/commons-httpclient-3.1.jar lib/commons-logging-1.1.jar lib/log4j-1.2.16.jar lib/jackson-all-1.8.5.jar
Main-Class: main.KillCheatFans
第一行是MAINIFEST的版本,第二行Class-Path就指定了外來jar包的位置,第三行指定我們要執行的MAIN java檔案。
這裡要注意幾點:
1、Class-Path: 和Main-Class: 後邊都有一個空格,必須加上,否則會打包失敗,錯誤提示為:Invalid header field; 2、假設我們的專案打包後為KillCheatFans.jar,那麼按照上面的定義,應該在 KillCheatFans.jar的同層目錄下建立一個lib資料夾(即lib檔案和打包的jar檔案 在同一個目錄下),並將相關的jar包放在裡面。否則將會出現“Exception in thread "main" java.lang.NoClassDefFoundError”的錯誤; 3、Main-Class後面是類的全地址,比如你的主檔案是KillCheatFans.java,檔案裡打包為package com.main; 那麼這裡就寫com.main.KillCheatFans, 不要加.java字尾,主檔案地址寫錯將會出現“找不到或無法載入主類”的錯誤; 4、寫完Main-Class後一定要回車(即最後一行是空白行),讓游標到下一行,這樣你生成的jar包才能找到你的主class去執行, 否則將會出現“jar中沒有主清單屬性”的錯誤。
重點來了,Class-Path: lib/commons-codec.jar ..... 等等這些jar包,還需要與java專案打成jar包放在同級目錄下,才可以執行
如下圖:我將java專案打包成BigFile.jar; 那我這個java專案引用的所有 jar 包應該放在libs資料夾中,在用命令來執行,才會生效
注意:Class-Path: lib/commons-codec.jar 中的lib 是可以改的,比如改成我的libs都是可以的
這樣就可以大功告成了