簡體   English   中英

在Java程序中包含第三方jar文件的最佳實踐是什么?

[英]What is the best practice for including third party jar files in a Java program?

我有一個程序需要幾個第三方庫,目前它的打包方式如下:

zerobot.jar (my file)
libs/pircbot.jar
libs/mysql-connector-java-5.1.10-bin.jar
libs/c3p0-0.9.1.2.jar

據我所知,處理第三方庫的“最佳”方法是將它們放在我的jar文件清單中的類路徑中,這將在跨平台工作,不會減慢啟動速度(將它們捆綁在一起)並且不會遇到法律問題(重新包裝可能)。

問題在於自己提供第三方庫的用戶(示例用例,升級它們以修復錯誤)。 其中兩個庫在文件中具有版本號,這增加了麻煩。

我目前的解決方案是我的程序有一個引導過程,它創建一個新的類加載器並使用它來實例化程序。 這個自定義類加載器將lib /中的所有.jar文件添加到其類路徑中。

我目前的方式工作正常,但我現在在我的應用程序中有兩個自定義類加載器,最近對代碼的更改導致了難以調試的問題,所以如果有更好的方法我想要消除這種復雜性。 對於我確信這是一種非常常見的情況,它似乎也過度工程化了。

所以我的問題是,我該怎么做呢?

我們用jar提供腳本文件。 例如some.bat,some.sh等。

從Java6開始,您可以使用通配符指定類路徑。

這是一篇很好的文章,解釋了這種方法: https//blogs.oracle.com/mr/entry/class_path_wildcards_in_mustang

如果你的觀眾是技術人員(聽起來他們願意放入新的jar文件),那么也許你可以提供他們可以編輯的.sh和.bat文件來修改類路徑? 對於他們來說,這比自定義類加載器更透明。

您可以嘗試Fat-Jar解決方案,它與' Fat Jar Eclipse Plug-In '完美配合​​。 我已經習慣了幾個沒有任何問題的項目。 它的原理似乎與您當前的解決方案相同。

我想我會走明顯路線。 在條目jar的清單中聲明類路徑,並具有以下條目:

libs/pircbot.jar
libs/mysql-connector-java-5-bin.jar
libs/c3p0.jar

然后,如果用戶想要升級到最新的庫版本,他們將不得不重命名它們以匹配清單中聲明的​​內容。 我不認為這太麻煩了,它使內部的事情變得更加簡單。

我也一般不喜歡自動加載./lib/中的所有內容,這似乎有潛在危險。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM