Maven項(xiàng)目中將本地依賴庫(kù)打包到最終的JAR中的實(shí)現(xiàn)
前言
在現(xiàn)代后端開(kāi)發(fā)中,構(gòu)建高效且可擴(kuò)展的 Web 應(yīng)用程序通常依賴于多種第三方庫(kù)和內(nèi)部依賴。這些依賴可以來(lái)自公共倉(cāng)庫(kù),也可能是公司內(nèi)部自研的庫(kù)或尚未發(fā)布到公共倉(cāng)庫(kù)的 JAR 包。本文將詳細(xì)介紹如何在 Maven 項(xiàng)目中處理本地依賴庫(kù),并確保這些依賴能夠正確地打包到最終的可執(zhí)行 JAR 文件中。本文不僅以 Doris 連接器(flink-doris-connector)作為示例,還涵蓋了處理其他本地依賴庫(kù)的通用方法。
為什么需要打包本地依賴庫(kù)?
通常,依賴庫(kù)可以通過(guò) Maven 中央倉(cāng)庫(kù)或其他公共倉(cāng)庫(kù)輕松獲取和管理。然而,有時(shí)我們需要使用一些未發(fā)布到公共倉(cāng)庫(kù)的本地 JAR 包,例如:
- 公司內(nèi)部開(kāi)發(fā)的庫(kù)
- 第三方提供但未上傳到 Maven 倉(cāng)庫(kù)的庫(kù)
- 特殊版本或定制版的庫(kù)
- 直接引用本地依賴庫(kù)可能會(huì)引發(fā)一些問(wèn)題,尤其是在構(gòu)建和部署過(guò)程中。為了確保項(xiàng)目的可移植性和一致性,必須將這些本地依賴正確地打包到最終的 JAR 文件中。
常見(jiàn)問(wèn)題:使用 system 作用域
在 Maven 中,可以使用 system 作用域來(lái)引用本地 JAR 包。然而,這種方法有幾個(gè)顯著的缺點(diǎn):
- 不可移植性:system 作用域依賴的路徑是硬編碼的,其他開(kāi)發(fā)人員在不同的環(huán)境中可能無(wú)法找到該路徑。
- 打包問(wèn)題:使用 system 作用域的依賴默認(rèn)不會(huì)包含在最終打包的 JAR 文件中,導(dǎo)致運(yùn)行時(shí)缺少必要的依賴。
依賴管理的最佳實(shí)踐
為了避免上述問(wèn)題,推薦的做法是將本地依賴庫(kù)安裝到 Maven 本地倉(cāng)庫(kù)中,并使用常規(guī)的依賴管理機(jī)制進(jìn)行引用。這樣,可以確保依賴庫(kù)的一致性和可移植性,同時(shí)也方便后續(xù)的依賴管理和版本控制。
解決方案:將本地依賴庫(kù)打包到最終 JAR
詳細(xì)步驟
以下是詳細(xì)的步驟,展示如何在 Maven 項(xiàng)目中包含本地依賴庫(kù)并將其打包到最終的 JAR 文件中。
步驟 1:將本地 JAR 安裝到 Maven 本地倉(cāng)庫(kù)
首先,需要將本地的 JAR 包安裝到 Maven 的本地倉(cāng)庫(kù)中。假設(shè)有一個(gè)本地的 flink-doris-connector JAR 文件位于項(xiàng)目的 libs 目錄下。
打開(kāi)終端,執(zhí)行以下命令:
mvn install:install-file \ -DgroupId=org.apache.doris \ -DartifactId=flink-connector-doris_2.12 \ -Dversion=1.14_2.12-1.1.1 \ -Dpackaging=jar \ -Dfile=libs/flink-doris-connector-1.14_2.12-1.1.1.jar
參數(shù)說(shuō)明:
通過(guò)上述命令,將本地的 JAR 包安裝到 Maven 本地倉(cāng)庫(kù)中,使其能夠像其他依賴一樣被 Maven 管理。
- -DgroupId:依賴的組織 ID,通常與包名相對(duì)應(yīng)。
- -DartifactId:依賴的模塊名。
- -Dversion:依賴的版本號(hào)。
- -Dpackaging:依賴的打包類(lèi)型,通常為 jar。
- -Dfile:本地 JAR 文件的路徑。
步驟 2:修改 pom.xml 文件中的依賴配置
安裝完成后,需要在項(xiàng)目的 pom.xml 文件中引用該依賴。移除之前使用 system 作用域的配置,并改為默認(rèn)的 compile 作用域。
原始依賴配置(使用 system 作用域)
<dependency> <groupId>org.apache.doris</groupId> <artifactId>flink-connector-doris_${scala.binary.version}</artifactId> <version>1.14_2.12-1.1.1</version> <scope>system</scope> <systemPath>${project.basedir}/libs/flink-doris-connector-1.14_2.12-1.1.1.jar</systemPath> </dependency>
修改后的依賴配置
注意:省略了 和 元素,默認(rèn)作用域?yàn)?compile,這樣 Maven 會(huì)自動(dòng)處理該依賴。
<dependency> <groupId>org.apache.doris</groupId> <artifactId>flink-connector-doris_${scala.binary.version}</artifactId> <version>1.14_2.12-1.1.1</version> </dependency>
步驟 3:重新構(gòu)建項(xiàng)目
mvn clean package
此命令將:
清理之前的構(gòu)建產(chǎn)物。
編譯項(xiàng)目源代碼。
使用 Maven Shade 插件將所有依賴(包括本地依賴)打包到最終的 JAR 文件中。
到此這篇關(guān)于Maven項(xiàng)目中將本地依賴庫(kù)打包到最終的JAR中的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Maven 本地依賴庫(kù)打包內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring?Security?OAuth?Client配置加載源碼解析
這篇文章主要為大家介紹了Spring?Security?OAuth?Client配置加載源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07Spring Security 表單登錄功能的實(shí)現(xiàn)方法
這篇文章主要介紹了Spring Security 表單登錄,本文將構(gòu)建在之前簡(jiǎn)單的 Spring MVC示例 之上,因?yàn)檫@是設(shè)置Web應(yīng)用程序和登錄機(jī)制的必不可少的。需要的朋友可以參考下2019-06-06Java8實(shí)戰(zhàn)之Stream的延遲計(jì)算
JDK中Stream的中間函數(shù)如 filter(Predicate super T>)是惰性求值的,filter并非對(duì)流中所有元素調(diào)用傳遞給它的Predicate,下面這篇文章主要給大家介紹了關(guān)于Java8實(shí)戰(zhàn)之Stream延遲計(jì)算的相關(guān)資料,需要的朋友可以參考下2021-09-09利用Springboot+vue實(shí)現(xiàn)圖片上傳至數(shù)據(jù)庫(kù)并顯示的全過(guò)程
最近遇到個(gè)需求,需要將圖片在前端上傳到服務(wù)器進(jìn)行保存,然后讀取到前端進(jìn)行展示,這篇文章主要給大家介紹了關(guān)于利用Springboot+vue實(shí)現(xiàn)圖片上傳至數(shù)據(jù)庫(kù)并顯示的相關(guān)資料,需要的朋友可以參考下2023-04-04解決java-jar報(bào)錯(cuò):xxx.jar 中沒(méi)有主清單屬性的方法
在使用 java -jar xxx.jar 命令運(yùn)行 Java 應(yīng)用程序時(shí),遇到了以下錯(cuò)誤:xxx.jar 中沒(méi)有主清單屬性,這個(gè)錯(cuò)誤表示 JAR 文件缺少必要的啟動(dòng)信息,本文將介紹該錯(cuò)誤的原因以及如何通過(guò)修改 pom.xml 文件來(lái)解決,需要的朋友可以參考下2024-11-11spring cloud學(xué)習(xí)入門(mén)之config配置教程
這篇文章主要給大家介紹了關(guān)于spring cloud學(xué)習(xí)入門(mén)之config配置的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用spring cloud具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2017-09-09詳細(xì)說(shuō)明關(guān)于Java的數(shù)據(jù)庫(kù)連接(JDBC)
這篇文章主要介紹了詳細(xì)說(shuō)明關(guān)于Java的數(shù)據(jù)庫(kù)連接JDBC,JDBC是用Java語(yǔ)言向數(shù)據(jù)庫(kù)發(fā)送SQL語(yǔ)句,需要的朋友可以參考下面文章內(nèi)容2021-09-09