1. 程式人生 > >在Eclipse中打包引用了第三方jar包的J2SE專案成jar檔案的方法

在Eclipse中打包引用了第三方jar包的J2SE專案成jar檔案的方法

最近有個專案有些定時任務,一開始用的quartz,挺好用的一款定時任務工具,但是對大量資料處理時,消耗了大量的tomcat資源,所以決定將一些處理大批量資料的定時任務從web應用中分離,做成批處理的形式。我的方法是建立Java專案,使用JDBC連線資料庫進行資料處理,然後打包成jar檔案,通過系統呼叫執行,這樣獨立執行避免對應web應用造成影響。其實之前也接觸過Kettle這種etl工具,這應該是主流的處理方式,但是專案緊急,決定後續研究並運用。

Java專案開發完成後,在打包成jar檔案的時候遇到一個問題:無法匯出引用的第三方jar包。

經過努力查閱資料,解決方法如下:
1,在專案中建立MANIFEST.MF清單檔案,這個 manifest 檔案定義了與擴充套件和包相關的資料。

Manifest-Version: 1.0
Class-Path: lib/fastjson-1.2.3.jar lib/mysql-connector-java-5.0.8.jar
Main-Class: com.srd.ljzd.job.LanuchJob

這裡寫圖片描述
注意點

  • Class-Path: 和Main-Class: 後邊都有一個空格,必須加上,否則會打包失敗,錯誤提示為:Invalid header field;
  • 假設我們的專案打包後為test.jar,那麼按照上面的定義,應該在
    test.jar的同層目錄下建立一個lib資料夾(即lib檔案和打包的jar檔案
    在同一個目錄下),並將相關的jar包放在裡面。否則將會出現“Exception in thread “main” java.lang.NoClassDefFoundError”的錯誤;
  • Main-Class後面是類的全地址,比如你的主檔案是Lanuch.java,檔案裡打包為package com.main;
    那麼這裡就寫com.main.Lanuch, 不要加.java字尾,主檔案地址寫錯將會出現“找不到或無法載入主類”的錯誤;
  • 寫完Main-Class後一定要回車(即最後一行是空白行),讓游標到下一行,這樣你生成的jar包才能找到你的主class去執行,否則將會出現“jar中沒有主清單屬性”的錯誤。

2,匯出jar檔案,
右擊Java工程選擇Export—>選擇JAR file—>Next
這裡寫圖片描述

選擇要打包的檔案,不需要的檔案不必打包,減小打包後的jar檔案大小,並進行選項配置如下
這裡寫圖片描述

  • Export generated class files and resources 表示只匯出生成的.class檔案和其他資原始檔
  • Export all output folders for checked projects 表示匯出選中專案的所有資料夾
  • Export java source file and resouces 表示匯出的jar包中將包含你的原始碼*.java,如果你不想洩漏原始碼,那麼就不要選這項了
  • Export refactorings for checked projects 把一些重構的資訊檔案也包含進去

保持預設選項,繼續點選next
這裡寫圖片描述

選擇我們在第一步中自定義的配置檔案路徑
這裡寫圖片描述

  • Generate the manifest file:是系統幫我們自動生成MANIFEST.MF檔案,如果你的專案沒有引用其他class-path,那可以選擇這一項。
  • Use existing mainfest from workspace:這是可以選擇我們自定義的.MF檔案,格式如上所寫,引用了第三方包時選用。
  • Seal content:要封裝整個jar或者指定的包packet。
  • Main class:這裡可以選擇你的程式入口,將來打包出來的jar就是你這個入口類的執行結果。

最後Finish,即生成了我們要的jar檔案。

3,執行jar檔案
在存放jar檔案的目錄下需要放入我們引用的jar包,這個在上面已經說過,然後執行命令java -jar 你的jar檔名稱就可以了。
如果在jar中有一些System.out.prinln語句,執行後不想在控制檯輸出而是儲存在檔案中方便以後檢視,可以用一下命令:
java -jar test.jar > log.txt (這時命令列視窗不會有任何輸出)
輸出資訊會被列印到log.txt中,當然log.txt自動生成,並位於和test.jar一個目錄中。

新建一個批處理檔案,如lanuch.bat,內容為:java -jar test.jar,放在jar檔案同一目錄下即可,並設定定時執行。

另外我還看到可以使用Eclipse的打包外掛Fat Jar來進行打包,感興趣的同學可以試試。

感謝您的閱讀,如果文章中有錯誤或者您有什麼好的建議,也歡迎您直接留言批評指教。Thanks,friends!