Maven 項目中將本地依賴庫打包到最終的 JAR 中

文章目錄

  • 前言
  • 詳細步驟

前言

在現代后端開發中,構建高效且可擴展的 Web 應用程序通常依賴于多種第三方庫和內部依賴。這些依賴可以來自公共倉庫,也可能是公司內部自研的庫或尚未發布到公共倉庫的 JAR 包。本文將詳細介紹如何在 Maven 項目中處理本地依賴庫,并確保這些依賴能夠正確地打包到最終的可執行 JAR 文件中。本文不僅以 Doris 連接器(flink-doris-connector)作為示例,還涵蓋了處理其他本地依賴庫的通用方法。


為什么需要打包本地依賴庫?

通常,依賴庫可以通過 Maven 中央倉庫或其他公共倉庫輕松獲取和管理。然而,有時我們需要使用一些未發布到公共倉庫的本地 JAR 包,例如:

  • 公司內部開發的庫
  • 第三方提供但未上傳到 Maven 倉庫的庫
  • 特殊版本或定制版的庫
  • 直接引用本地依賴庫可能會引發一些問題,尤其是在構建和部署過程中。為了確保項目的可移植性和一致性,必須將這些本地依賴正確地打包到最終的 JAR 文件中。

常見問題:使用 system 作用域

  • 在 Maven 中,可以使用 system 作用域來引用本地 JAR 包。然而,這種方法有幾個顯著的缺點:

    • 不可移植性:system 作用域依賴的路徑是硬編碼的,其他開發人員在不同的環境中可能無法找到該路徑。
    • 打包問題:使用 system 作用域的依賴默認不會包含在最終打包的 JAR 文件中,導致運行時缺少必要的依賴。
  • 依賴管理的最佳實踐

    為了避免上述問題,推薦的做法是將本地依賴庫安裝到 Maven 本地倉庫中,并使用常規的依賴管理機制進行引用。這樣,可以確保依賴庫的一致性和可移植性,同時也方便后續的依賴管理和版本控制。

  • 解決方案:將本地依賴庫打包到最終 JAR


詳細步驟

以下是詳細的步驟,展示如何在 Maven 項目中包含本地依賴庫并將其打包到最終的 JAR 文件中。

  • 步驟 1:將本地 JAR 安裝到 Maven 本地倉庫

    首先,需要將本地的 JAR 包安裝到 Maven 的本地倉庫中。假設有一個本地的 flink-doris-connector JAR 文件位于項目的 libs 目錄下。

    打開終端,執行以下命令:

    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
    

    參數說明:

    • -DgroupId:依賴的組織 ID,通常與包名相對應。
    • -DartifactId:依賴的模塊名。
    • -Dversion:依賴的版本號。
    • -Dpackaging:依賴的打包類型,通常為 jar。
    • -Dfile:本地 JAR 文件的路徑。

    通過上述命令,將本地的 JAR 包安裝到 Maven 本地倉庫中,使其能夠像其他依賴一樣被 Maven 管理。

  • 步驟 2:修改 pom.xml 文件中的依賴配置

    安裝完成后,需要在項目的 pom.xml 文件中引用該依賴。移除之前使用 system 作用域的配置,并改為默認的 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>
      
    • 修改后的依賴配置

      注意:省略了 和 元素,默認作用域為 compile,這樣 Maven 會自動處理該依賴。

      <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:重新構建項目

    mvn clean package
    

    此命令將:

    1. 清理之前的構建產物。
    2. 編譯項目源代碼。
    3. 使用 Maven Shade 插件將所有依賴(包括本地依賴)打包到最終的 JAR 文件中。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/80522.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/80522.shtml
英文地址,請注明出處:http://en.pswp.cn/web/80522.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

快速定位到源碼位置的插件 - vite/webpack

1. vite-plugin-vue-devtools npm i vite-plugin-vue-devtools -D vite.config.js中配置 import vueDevTools from vite-plugin-vue-devtoolsexport default defineConfig({server: {port: 5173,host: 0.0.0.0},plugins: [vue(),vueJsx(),vueDevTools({componentInspector: t…

基于AH1101芯片的5V升18.6V LED恒流背光供電方案設計

基于AH1101芯片的5V升18.6V LED恒流背光供電方案設計 在現代電子設備中&#xff0c;LED背光技術因其高效、節能、壽命長等優點被廣泛應用于各類顯示設備。本文將詳細介紹如何利用AH1101高效升壓恒流驅動芯片&#xff0c;實現從5V輸入電壓升壓至18.6V&#xff0c;為LED背光板提供…

16.1 - VDMA視頻轉發實驗之TPG

文章目錄 1 實驗任務2 系統框圖3 硬件設計3.1 IP核配置3.2 注意事項 4 軟件設計4.1 注意事項4.2 工程源碼4.2.1 main.c文件 1 實驗任務 基于14.1&#xff0c;使用Xilinx TPG&#xff08;Test Pattern Generator&#xff09; IP提供視頻源&#xff0c;將視頻數據通過VDMA寫入PS…

認識Docker/安裝Docker

一、認識Docker Docker的定義 Docker 是一個開源的應用容器引擎&#xff0c;允許開發者將應用及其依賴打包到一個輕量級、可移植的容器中。容器化技術使得應用可以在任何支持 Docker 的環境中運行&#xff0c;確保環境一致性。 Docker的核心組件 Docker Engine&#xff1a;負責…

實用工具:微軟軟件PowerToys(完全免費),實現多臺電腦共享鼠標和鍵盤(支持window系統)

實用工具&#xff1a;微軟軟件 PowerToys 讓多臺電腦共享鼠標和鍵盤 在如今的數字化辦公與生活場景中&#xff0c;我們常常會面臨同時使用多臺電腦的情況。例如&#xff0c;辦公時可能一臺電腦用于處理工作文檔&#xff0c;另一臺用于運行專業軟件或查看資料&#xff1b;家庭環…

西門子 Teamcenter13 Eclipse RCP 開發 1.1 工具欄 普通按鈕

西門子 Teamcenter13 Eclipse RCP 開發 1.1 工具欄 普通按鈕 1 配置文件2 插件控制3 命令框架 位置locationURI備注菜單欄menu:org.eclipse.ui.main.menu添加到傳統菜單工具欄toolbar:org.eclipse.ui.main.toolbar添加到工具欄 style 值含義顯示效果push普通按鈕&#xff08;默…

React中巧妙使用異步組件Suspense優化頁面性能。

文章目錄 前言一、為什么需要異步組件&#xff1f;1. 性能瓶頸分析2. 異步組件的價值 二、核心實現方式1. React.lazy Suspense&#xff08;官方推薦&#xff09;2. 路由級代碼分割&#xff08;React Router v6&#xff09; 總結 前言 在 React 應用中&#xff0c;隨著功能復…

現在環保方面有什么新的技術動態

環保領域的技術發展迅速&#xff0c;尤其在“雙碳”目標、數字化轉型和可持續發展背景下&#xff0c;涌現出許多創新技術和應用。以下是當前環保領域的新技術動態&#xff08;截至2024年&#xff09;&#xff1a; 一、碳中和與碳減排技術 CCUS&#xff08;碳捕集、利用與封存&a…

solidwors插件 開發————仙盟創夢IDE

SolidWorks VBS SolidWorks 支持通過 VBScript&#xff08;.vbs&#xff09;腳本 進行簡單的二次開發&#xff08;如自動化建模、批量操作等&#xff09;&#xff0c;但嚴格來說這屬于 腳本編程&#xff0c;而非傳統的插件&#xff08;Plug-in&#xff09;開發&#xff08;插件…

docker(二)初識 docker

在第一章的容器化架構中&#xff0c;我們已經了解到了 docker 是一個容器化技術&#xff0c;本章將詳細介紹什么是虛擬化、容器化技術&#xff0c;以及什么是 docker。 一、物理機 VS 虛擬化 VS 容器化 物理機&#xff1a; 實際的服務器或者計算機。是相對于虛擬機而言的對實體…

ChatGPT + DeepSeek 聯合潤色的 Prompt 模板指令合集,用來潤色SCI論文太香了!

對于非英語母語的作者來說,寫SCI論文的時候經常會碰到語法錯誤、表達不夠專業、結構不清晰以及術語使用不準確等問題。傳統的潤色方式要么成本高、效率低,修改過程又耗時又費力。雖然AI工具可以幫助我們來潤色論文,但單獨用ChatGPT或DeepSeek都會存在內容泛泛、專業性不足的…

python打包exe報錯:處理文件時錯誤:Excel xlsx file; not supported

背景&#xff1a;最近用python寫一個excel解析工具&#xff0c;然后打包成exe可執行文件的時候&#xff0c;遇到這樣的問題 1.在我自己編譯器運行是可以正常將上傳后的excel進行解析&#xff0c;但是在打包成exe后&#xff0c;就無法正常解析excel 問題排查&#xff1a; 1.切換…

Ubuntu操作合集

UFWUncomplicated Firewall 查看狀態和規則&#xff1a; 1查看狀態sudo ufw status&#xff0c; 2查看詳細信息sudo ufw status verbose&#xff0c; 默認策略配置&#xff1a; 1拒絕所有入站sudo ufw default deny incoming 2允許所有出戰sudo ufw default allow outgoing …

怎么用Origin畫出MATLAB效果的3D時頻圖

MATLAB畫3D時頻圖的效果比Origin差遠了....但用Origin去畫MATLAB需要一些過程 本帖讓你輕輕松松把MATLAB的時頻圖搬移到Origin中&#xff0c;然后擁有高級視圖的3D時頻圖&#xff0c;并且可以隨心調整格式 一、數據搬移 首先&#xff0c;在MATLAB中打開時頻圖變量 復制 在O…

OpenEvidence AI臨床決策支持工具平臺研究報告

平臺概述 OpenEvidence是一個專為醫療專業人士設計的臨床決策支持工具,旨在通過整合各類臨床計算器和先進的人工智能技術,提高醫生的診療決策效率和準確性。作為一款綜合性醫療平臺,OpenEvidence將復雜的醫學計算流程簡化,同時提供個性化的臨床建議,使醫生能夠更快、更準…

vim - v

在 Vim 中&#xff0c;使用 可視模式&#xff08;Visual Mode&#xff09; 可以選中文本并進行復制、剪切、粘貼等操作。以下是詳細的使用方法&#xff1a; 1. 進入可視模式 命令功能v字符可視模式&#xff08;按字符選擇&#xff09;V&#xff08;大寫&#xff09;行可視模式…

GUI圖形化演示

目錄 概述 常用組件如下&#xff1a; JFrame: 一.新建JFrame對象&#xff1a; 二.設置JFrame的大小&#xff1a; 三.設定JFrame的關閉方式 布局方式&#xff1a; setLayout 方法概述 常用布局管理器 自定義布局 注意事項 面板與布局的嵌套&#xff1a; 監聽器&#…

Visual Studio已更新為17.14+集成deepseek實現高效編程

01 Visual Studio 2022 v17.14。 此更新側重于全面提供出色的開發人員體驗&#xff0c;側重于穩定性和安全性以及 AI 改進。 02 GPT-4o代碼完成模式 我們非常高興地宣布&#xff0c;新的 GPT-4o Copilot 代碼完成模型現已在 Visual Studio 17.14 中為 GitHub Copilot 用戶…

URP相機如何將場景渲染定幀模糊繪制

1&#xff09;URP相機如何將場景渲染定幀模糊繪制 2&#xff09;為什么Virtual Machine會隨著游戲時間變大 3&#xff09;出海項目&#xff0c;打包時需要勾選ARMv7嗎 4&#xff09;Unity是手動還是自動調用GC.Collect 這是第431篇UWA技術知識分享的推送&#xff0c;精選了UWA社…

OpenAI推出Codex — ChatGPT內置的軟件工程Agents

OpenAI繼續讓ChatGPT對開發者更加實用。 幾天前,他們增加了連接GitHub倉庫的支持,可以"Deep Research"并根據你自己的代碼提問。 今天,該公司在ChatGPT中推出了Codex的研究預覽版,這是迄今為止最強大的AI編碼Agent。 它可以編寫代碼、修復錯誤、運行測試,并在…