1. 程式人生 > >一個java專案引入jar包後,再把這個java專案打包,遇到的jar找不到的問題

一個java專案引入jar包後,再把這個java專案打包,遇到的jar找不到的問題

參考文章:

步驟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都是可以的

這樣就可以大功告成了