日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

maven 打包指定依赖包_Maven打包成Jar文件时依赖包的问题

發布時間:2024/8/23 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 maven 打包指定依赖包_Maven打包成Jar文件时依赖包的问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我們項目中使用到第三方的庫文件,這些jar庫文件并沒有放到Maven中央庫上,導致我們需要在項目中自己配置使用。我們的兩三個開發人員對Java都是很熟,因此在使用中遇到了一些問題,表現在:在本地中引入第三方jar包后,在Idea中進行相應設置后,可以調試運行了,但是用Docker打包上傳到服務器后,運行時會提示找不到某些類的定義。

經查看這些找不到的類就是來自第三方庫,那么問題有可能是第三方jar包的路徑問題,或者是根本就沒有打包進jar文件里面。我們可以去Docker容器內部查看jar文件,執行命令:jar tf xxx.jar|grep lib,其中xxx.jar是打包后生成的文件名稱。這個命令打印出jar文件中lib目錄下的所有文件,從這里我們可以看到,確實沒有包含第三方的jar文件。

在網上找了一陣子,各種說法五花八門,然而都不能解決問題,比如這里有一篇:3-ways-to-add-local-jar-to-maven-project,看著貌似能解決問題,但使用后還是無法解決。比如將第三方jar包安裝到本地Maven,這種方式是可以解決本地編譯的問題,但我們還得去編譯服務器上再安裝一遍,而且要指定groupId,artifactId等東西,感覺蠻麻煩。我們只想在編譯打包時,把我們的lib文件夾的文件都拷貝到jar文件的lib目錄下。有什么辦法呀?

Maven中有各種plugin,也就是插件,有人推薦用assembly插件,比如這樣寫:

maven-assembly-plugin

jar-with-dependencies

我們以為這樣就能把所有依賴包放進最終的jar文件中了,可惜試了之后還是不行,其它類似方法也試了都不行。后面想想,是不是要把lib文件夾放到resource目錄下。試了之后,發現這回倒是拷貝進jar文件了,但是放置的位置是BOOT-INF/classes/lib里面,而其他的庫文件則放到BOOT-INF/lib里面,這樣運行時會不會找不到那些第三方jar文件呢?我們沒有驗證,然后在這里找到一篇文章,解決了拷貝lib目錄文件到BOOT-INF/lib的問題,配置如下:

src/lib

BOOT-INF/lib/

**/*.jar

src/main/resources

BOOT-INF/classes/

這樣之后,所有的依賴包都放到BOOT-INF/lib目錄下了,程序也可以正常運行了。

以為到這里能加雞腿了,結果來個更大的坑。第三方庫里面有讀取文件的接口,我們在使用接口時,傳入了一個配置相關的文件的路徑,我們是在resources目錄下新建了個目錄來存放這個配置文件的。運行時異常:

java.io.FileNotFoundException:

class path resource [aaa/xxx.conf] cannot be resolved to absolute file path because it does not reside in the file system.

這個問題是因為程序去讀取文件時,是去文件系統里面找文件,而不是從jar里面找,人家是建議使用getInputStream而不是getFile。可是讀取文件的功能是第三方庫實現的,我們沒法改動讀取文件的方式。那怎么辦?老老實實在Dockerfile文件加個拷貝操作唄,把配置文件放到文件系統相應目錄下即可。

總結一下,這個問題的原因還在于,我們對官方Maven文檔不熟,沒有研究過各種配置,對Jar文件的組織結構和運行原理不太清楚,因為我們幾個Java方面的經驗都不夠多,踩過的坑還太少,同時也不得不感嘆,Java開發里面的各種配置,也真是眼花繚亂啊,即便我們也使用了Spring Boot這種簡化了配置的開發框架。

文章來源:技術人成長

歡迎關注公眾號:

總結

以上是生活随笔為你收集整理的maven 打包指定依赖包_Maven打包成Jar文件时依赖包的问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。