java客戶端引入第三方包方法

將java作為客戶端運行(即通過java -jar client.jar方式運行),如有引用第三方jar包,不作特殊處理是無法正確運行,會拋出ClassNotFoundException異常。
如以下代碼引用fastjson包

package asan.demo.client;
import com.alibaba.fastjson.JSON;
import java.util.HashMap;
import java.util.Map;
public class Client {
    public Client() {
        super();
    }
    
    public static void main(String[]cmd){
        Map<String,String>userInfo=new HashMap<String,String>();
        userInfo.put("name", "jianfeng");
        userInfo.put("company", "definesys");
        userInfo.put("email", "jianfeng.zheng@definesys.com");
        String json=JSON.toJSONString(userInfo);
        System.out.println(json);
    }
}

直接打包運行,報以下錯誤

通過MF文件引入方式

標準的jar包都有一個MF文件,該文件路徑為META-INF\MANIFEST.MF,可以將jar包解壓查看該文件,MF文件主要用來描述jar一些基本信息,如版本,作者,主類路徑等。
如以上代碼打包后MF文件內(nèi)容如下:


這里信息較少,只有版本和主類信息。注意,注意,這里總共有4行,MF文件結(jié)尾必須要有兩行空白行。
創(chuàng)建目錄lib該目錄和客戶端在同一個路徑下,將引用的jar包復制到lib目錄下,如圖

QQ20171015-173220@2x.png

在MF文件中增加一行(可以用壓縮軟件打開jar編輯推薦使用7-Zip)

Class-Path: ./lib/fastjson-1.2.4.jar

如有多個jar包引用空格隔開

Class-Path: ./lib/fastjson-1.2.4.jar ./lib/gson-2.2.4.jar

有兩個地方需要注意

  • Class-Path后面是英文冒號,并且冒號后面有個空格
  • 必須保證MF文件最后有兩行空格

這樣就可以正常運行了。

通過jar命令

將所有jar包包括客戶端放到同一目錄下,分別用jar命令解壓到當前目錄,客戶端最后解壓(避免MF文件被覆蓋)

jar -xvf fastjson-1.2.4.jar
jar -xvf Client.jar

解壓后的文件結(jié)構如圖


將所有的jar文件刪除后執(zhí)行以下命令重新打包

jar -cvfM Client.jar *

重新打包后的jar就可以正常運行

最后

兩種方式各有利弊,MF方式第三方jar包更新無需重新打包,jar打包方式交付的時候只要一個jar包就夠了,但第三方包更新需要重新打包。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容