Maven進階知識

一、Maven 坐標

(一)概念

在 Maven 中坐標是構件的唯一標識,其元素包括 groupId、artifactId、version、packaging、classifier。其中 groupId、artifactId、version 是必定義項,packaging 默認為 jar。

(二)意義

為 Maven 世界中海量構件提供統一規范的唯一標識,便于機器自動查找。

(三)含義詳解

  1. groupId :組織標識,通常是公司網址反寫加項目名(如 com.example.project)。

  2. artifactId :項目名,一般格式為項目名 - 模塊名(如 myproject - core)。

  3. version :版本號,形式如 0.0.1 - SNAPSHOT。第一位大版本號,第二位分支版本號,第三位小版本號。后綴有特定含義,如 SNAPSHOT(快照版本)、ALPHA(內測)、BETA(公測)、RELEASE(穩定)、GA(正式發布)。

  4. packaging :打包方式,常見有 pom、jar、war 等。

  5. classifier :輔助定義構件輸出的附屬構件。

  6. 如圖

二、依賴

(一)意義

解決項目中對各類外部庫的依賴管理難題,Maven 能自動下載并妥善放置依賴至本地倉庫,通過在 POM 文件 dependencies 元素內聲明依賴關系。

(二)使用示例

以引入 junit - 4.9.jar 包為例:

<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.9</version><scope>test</scope>
</dependency>

屬性說明:三維坐標用于定位依賴包;scope 控制依賴包在何種場景加入 classpath,可去 Maven 官網中央倉庫查找依賴。

(三)依賴范圍

Maven 項目開發涉及三套 classpath:

  1. 主代碼 :main 下主代碼編譯依賴。

  2. 測試代碼 :test 下測試代碼編譯依賴。

  3. 運行時 :main 代碼運行時依賴。

依賴范圍通過 scope 標簽設置,共 6 種:

  1. compile :默認,對編譯、測試、運行 classpath 都有效。

  2. test :僅對測試 classpath 有效,如 JUnit。

  3. provided :對編譯與測試有效,運行時無效。例如 web 開發中 servlet - api,編譯測試用到,運行時由容器提供,打 war 包時不放入 WEB - INF/lib。

  4. runtime :與 provided 相對,運行時有效。像 jdbc 編寫是接口規范,運行需具體實現類 jar 包。

  5. 例如:

(四)依賴傳遞與可選依賴

  1. 依賴傳遞 :若 A 依賴 B,C 依賴 A,則 C 也會依賴 B。

  2. 依賴阻斷 :B 中加入 <optional>true</optional> 標簽,B 就不會被傳遞。

  3. 可選依賴 :要排除依賴中某項,用 exclusion 屬性。例如在 C 中排除 A 中的 B 依賴,示例代碼如下:

<dependency><groupId>a - group</groupId><artifactId>a - artifact</artifactId><version>a - version</version><exclusions><exclusion><groupId>b - group</groupId><artifactId>b - artifact</artifactId></exclusion></exclusions>
</dependency>

三、倉庫

(一)概述

Maven 倉庫是存放項目依賴的第三方庫等構件的地方,幫助管理構件。

倉庫類型有本地、中央、遠程倉庫。

(二)本地倉庫

  1. 初次執行 Maven 命令時創建,默認在用戶目錄下(Linux 和 Windows 均如此),路徑為%USER_HOME%/.m2/repository/。

  2. 運行 Maven 時,優先從本地倉庫獲取構件,若沒有則從遠程倉庫下載至本地再使用。

  3. 可通過修改%Maven_HOME%/conf/settings.xml 文件中的配置更改默認位置。

(三)中央倉庫

  1. 由 Maven 社區管理,包含大量常用開源 Java 構件及相關信息。

  2. 無需額外配置,但需網絡訪問。

(四)依賴搜索順序

四、繼承和聚合

(一)繼承

  1. 意義 :避免重復配置,提升項目安全性與管理便捷性。多個子模塊可繼承父模塊的公共配置,如公共依賴、插件配置、倉庫地址等。

  2. 可繼承 POM 元素groupId :項目組 ID,項目坐標的核心元素;version :項目版本,項目坐標的核心元素;description :項目的描述信息;organization :項目的組織信息;inceptionYear :項目的創始年份;url :項目的 url 地址;developers :項目的開發者信息;contributors :項目的貢獻者信息;distributionManagement :項目的部署信息;issueManagement :缺陷跟蹤系統信息;ciManagement :項目的持續集成信息;scm :項目的版本控制信息;mailingListserv :項目的郵件列表信息;properties :自定義的 Maven 屬性;dependencies :項目的依賴配置;dependencyManagement :項目的依賴管理配置;repositories :項目的倉庫配置;build :包括項目的源碼目錄配置、輸出目錄配置、插件配置、插件管理配置等;reporting :包括項目的報告輸出目錄配置、報告插件配置等。

  3. IDEA 實現 Maven 繼承 :以創建父子項目為例,創建父類項目,再創建子類項目 core、manage、portal 等,子模塊繼承父模塊,觀察父子項目的 pom 文件配置差異。

  4. 如圖

????????創建父類項目?

??

????????創建子類項目core?

????????以同樣的方式創建manage和portal項目:?

????????至此,一個由parent統一管理core,manage和portal的mavan項目就創建好了;

觀察父子項目的pom文件配置

(二)聚合

暫未在原文中明確提及聚合相關內容,通常聚合用于構建多模塊項目,將多個模塊聚合在一起構建。

(三)properties 屬性使用

通過 properties 元素定義 Maven 屬性,在其他地方以 ${屬性名稱} 引用,消除重復,統一管理。如統一聲明 Spring Framework 版本,避免多處重復聲明。

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

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

相關文章

網絡原理 ——TCP 協議

TCP 報文結構 TCP 頭部 20字節&#xff08;無選項&#xff09;&#xff0c;關鍵字段&#xff1a; 字段長度&#xff08;bit&#xff09;說明源端口16發送方端口目的端口16接收方端口序列號&#xff08;seq&#xff09;32數據字節的編號確認號&#xff08;ack&#xff09;32期…

C#使用sftp遠程拷貝文件

需要下載 的包&#xff1a;Core.Renci.SshNet 下載依賴包的時候需要注意版本&#xff0c;高版本的.net環境不支持會用不了&#xff0c;我用的.net5,所以下載的2021.10.2 功能的核心式創建一個SftpClient&#xff0c;并傳入所需要的參數&#xff1a;遠程IP地址&#xff0c;端口…

文本預處理(NLTK)

1. 自然語言處理基礎概念 1.1 什么是自然語言處理 自然語言處理( Natural Language Processing, NLP)是計算機科學領域與人工智能領域中的一個重要方向。它研究能實現人與計算機之間用自然語言進行有效通信的各種理論和方法。自然語言處理是一門融語言學、計算機科學、數學于…

socket編程基礎

上一篇 --- 網絡基礎概念&#xff08;下&#xff09;https://blog.csdn.net/Small_entreprene/article/details/147320155?fromshareblogdetail&sharetypeblogdetail&sharerId147320155&sharereferPC&sharesourceSmall_entreprene&sharefromfrom_link 理…

CSS 解決手機瀏覽器默認行為(點擊出現藍色背景)

最近寫了一個 Web 應用&#xff0c;可以兼容手機端和PC端&#xff0c;在PC端調試的時候沒有發現這個問題&#xff0c;但是在手機上或者PC瀏覽器改成手機模式進行調試的時候就會出現下面這個場景&#xff1a; 這是兩個 div&#xff0c;點擊的時候&#xff0c;會出現一個藍色的背…

多模態大語言模型arxiv論文略讀(三十八)

Tables as Texts or Images: Evaluating the Table Reasoning Ability of LLMs and MLLMs ?? 論文標題&#xff1a;Tables as Texts or Images: Evaluating the Table Reasoning Ability of LLMs and MLLMs ?? 論文作者&#xff1a;Naihao Deng, Zhenjie Sun, Ruiqi He, A…

聊聊Spring AI Alibaba的YuQueDocumentReader

序 本文主要研究一下Spring AI Alibaba的YuQueDocumentReader YuQueDocumentReader community/document-readers/spring-ai-alibaba-starter-document-reader-yuque/src/main/java/com/alibaba/cloud/ai/reader/yuque/YuQueDocumentReader.java public class YuQueDocument…

OCR定制識別:解鎖文字識別的無限可能

OCR 定制識別是什么&#xff1f; OCR&#xff0c;即光學字符識別&#xff08;Optical Character Recognition&#xff09; &#xff0c;它就像是一個神奇的 “文字翻譯器”&#xff0c;能把圖片里的文字轉化成計算機可編輯的文本。比如&#xff0c;你掃描一份紙質文檔成圖片&am…

麒麟系統(基于Ubuntu)上使用Qt編譯時遇到“type_traits文件未找到”的錯誤

在麒麟系統&#xff08;基于Ubuntu&#xff09;上使用Qt編譯時遇到“type_traits文件未找到”的錯誤&#xff0c;通常是由于C標準庫頭文件缺失或項目配置問題導致的。以下是逐步解決方案&#xff1a; 1. 安裝C標準庫和開發工具 確保系統已安裝完整的開發工具鏈和標準庫&#…

服務器上安裝node

1.安裝 下載安裝包 https://nodejs.org/en/download 解壓安裝包 將安裝包上傳到/opt/software目錄下 cd /opt/software tar -xzvf node-v16.14.2-linux-x64.tar.gz 將解壓的文件夾移動到安裝目錄(/opt/nodejs)下 mv /opt/software/node-v16.14.2-linux-x64 /opt/nodejs …

Vue3 + Vite + TS,使用 ExcelJS導出excel文檔,生成水印,添加背景水印,dom轉圖片,插入圖片,全部代碼

Vue3 Vite TS,使用 ExcelJS導出excel文檔&#xff0c;生成水印&#xff0c;添加背景水印&#xff0c;dom轉圖片&#xff0c;插入圖片&#xff0c;全部代碼 ExcelJS生成文檔并導出導出表頭其他函數 生成水印設置文檔的背景水印dom 轉圖片插入圖片全部代碼 ExcelJS 讀取&#…

devops自動化容器化部署

devops 一、簡單案例體驗gitlabrunner部署靜態文件二、devops企業級部署方案1、流程圖2、依賴工具3、流程圖4、主機規劃5、安裝工具軟件1、安裝git2、安裝gitlab3、安裝jenkins-server4、安裝harbor5、安裝web-server&#xff0c;也就是部署服務的機子&#xff0c;需要安裝dock…

高級 SQL 技巧:提升數據處理能力的實用方法

在數據驅動的時代,SQL 作為操作和管理關系型數據庫的標準語言,其重要性不言而喻。基礎的 SQL 語句能滿足日常的數據查詢需求,但在處理復雜業務邏輯、進行數據分析和優化數據庫性能時,就需要掌握一些高級 SQL 技巧。這些技巧不僅能提高查詢效率,還能實現復雜的數據處理任務…

21.disql命令登錄達夢數據庫,查詢并操作數據庫

目錄 1.連接達夢數據庫 1.1 windows或linux系統 步驟&#xff08;1&#xff09;&#xff1a;打開終端窗口 步驟&#xff08;2&#xff09;&#xff1a;進入夢數據庫安裝目錄下的 bin 文件夾 步驟&#xff08;3&#xff09;&#xff1a;用disql命令進行登錄 1.2 docker部署…

N8N MACOS本地部署流程避坑指南

最近n8n很火&#xff0c;就想在本地部署一個&#xff0c;嘗嘗鮮&#xff0c;看說明n8n是開源軟件&#xff0c;可以在本地部署&#xff0c;于是就嘗試部署了下&#xff0c;大概用了1個多小時&#xff0c;把相關的過程記錄一下&#xff1a; 1、基礎軟件包 abcXu-MacBook-m2-Air…

qt之開發大恒usb3.0相機一

1.在大恒相機給的sample里沒有看見qt開發的demo. 第一步先運行c sdk中中的demo&#xff0c;看了下代碼&#xff0c;大恒使用的UI框架是MFC.然后 vs2022編譯。運行結果 第一步&#xff0c;先用qt進行坐下頁面布局&#xff0c;如下圖&#xff08;保存圖片的地方做了些更改&#…

leetcode-枚舉

枚舉 3200. 三角形的最大高度 題目 給你兩個整數 red 和 blue&#xff0c;分別表示紅色球和藍色球的數量。你需要使用這些球來組成一個三角形&#xff0c;滿足第 1 行有 1 個球&#xff0c;第 2 行有 2 個球&#xff0c;第 3 行有 3 個球&#xff0c;依此類推。 每一行的球必…

DeepSeek智能時空數據分析(三):專業級地理數據可視化賞析-《杭州市國土空間總體規劃(2021-2035年)》

序言&#xff1a;時空數據分析很有用&#xff0c;但是GIS/時空數據庫技術門檻太高 時空數據分析在優化業務運營中至關重要&#xff0c;然而&#xff0c;三大挑戰仍制約其發展&#xff1a;技術門檻高&#xff0c;需融合GIS理論、SQL開發與時空數據庫等多領域知識&#xff1b;空…

如何用WordPress AI插件自動生成SEO文章,提升網站流量?

1. 為什么你需要一個WordPress AI文章生成插件&#xff1f; 每天手動寫文章太耗時&#xff1f;SEO優化總是不達標&#xff1f;WordPress AI插件能幫你24小時自動生成原創內容&#xff0c;從關鍵詞挖掘到智能排版&#xff0c;全程無需人工干預。 痛點&#xff1a;手動寫作效率低…

鼠標指定范圍內隨機點擊

鼠標指定范圍內隨機點擊 點贊神器 將鼠標移動到相應位置后按F5 F6鍵&#xff0c;設置點擊范圍&#xff0c; F8開始&#xff0c;ESC中止。 有些直播有點贊限制&#xff0c;例如某音&#xff0c;每小時限制3千次&#xff0c;可以設置1200毫秒&#xff0c;3000次。 軟件截圖&#…