深入了解Maven(一)

目錄

一.Maven介紹與功能

二.依賴管理

1.依賴的配置

2.依賴的傳遞性

3.排除依賴

4.依賴的作用范圍

5.依賴的生命周期


一.Maven介紹與功能

maven是一個項目管理和構建工具,是基于對象模型POM實現。

Maven的作用:

  • 便捷的依賴管理:使用Maven可以簡化依賴管理過程。通過在項目的pom.xml文件中聲明依賴關系,Maven可以自動下載所需的依賴庫,并將它們添加到項目的類路徑中。這消除了手動下載和配置jar包的繁瑣過程,使依賴管理更加方便和可靠。

  • 統一的項目結構:Maven定義了標準的項目結構,規定了源代碼、資源文件、測試代碼等目錄的布局方式。這使得不同IDE(如Eclipse、IntelliJ IDEA)之間可以共享和識別相同的項目結構,簡化了項目之間的遷移和協作。

  • 標準的項目構建流程:Maven提供了一套標準化的項目構建流程。通過執行Maven命令,可以進行項目的編譯、測試、打包、部署等一系列操作。這種標準化的構建流程確保了項目的一致性和可重復性,提高了開發效率。


二.依賴管理

1.依賴的配置

所謂的依賴指的就是當前項目所需要的jar包,一個項目可以引入多個jar包

案例:導入多個包 mysql、ch.qos.logback兩個包

首先打開maven項目工程找到pom.xml

設置依賴標簽

<!--    設置標簽依賴--><dependencies>
<!--        設置具體依賴--><dependency>
<!--            配置代表項目或組織的唯一標識符--><groupId>ch.qos.logback</groupId>
<!--            配置代表特定項目的唯一標識符--><artifactId>logback-classic</artifactId>
<!--            配置版本號--><version>1.2.3</version></dependency><!--        操作類似--><dependency><groupId>mysql-java</groupId><artifactId>mysql-java</artifactId><version>5.1.21</version></dependency></dependencies>

如果以前沒有使用過相關jar包,則會冒紅報錯,因為在本地倉庫沒有找到相關的jar包


2.依賴的傳遞性

如果一個項目projectA依賴了一個A-jar包,而一個A-jar包中又依賴了其他的jar包,那么projectA對應的也就依賴了A-jar包對應的其他jar包

依賴傳遞有兩種:一種是直接依賴,一種是間接依賴

?通過圖標形勢查看依賴關系

在pom中右鍵找到圖再點擊顯示依賴項

這樣就可以清晰看到項目之間的依賴

當然依賴可能會產生一個特殊情況,A->B->A 循環依賴,項目A依賴了項目B,而項目B依賴了項目A。這種情況也是面試題常問的一個問題

?面試題:Maven中如何解決依賴循環的問題

  1. 重構代碼結構:首先,我們可以檢查項目結構并嘗試重構代碼以消除依賴循環。這可能需要重新設計模塊之間的關系,將公共功能提取到獨立的模塊中,或者修改模塊的依賴關系,以確保它們形成一個有向無環圖(DAG)。

  2. 使用接口或抽象類:如果依賴循環是由于具體類之間的相互依賴引起的,我們可以考慮使用接口或抽象類來解耦它們。這樣,依賴關系將變得單向,并且可以更容易地管理。

  3. 使用Maven插件:Maven提供了一些插件來幫助解決依賴循環問題。例如,可以使用Maven的maven-dependency-plugin來分析項目依賴關系,并找出導致循環的依賴。然后,我們可以使用excludeoptional標記,將其中一個模塊的依賴排除或設置為可選,以打破循環。

  4. 模塊拆分:另一種方法是將存在依賴循環的模塊拆分為更小的、相互獨立的模塊。這樣,我們可以將它們放在不同的項目中,并使用Maven的多模塊項目進行管理。通過將功能劃分到不同的模塊中,可以更好地管理和控制它們之間的依賴關系。


3.排除依賴

由上面的內容可以知道依賴具有傳遞性,PorjectA項目會依賴A-jar包下的所有依賴jar包。但是如果明確知道工程ProjectA中只需要A-jar包,不需要A-jar包下的某一個包,則可以通過<exclustions>標簽和<exclustion>實現排除依賴

 <exclusions><exclusion><groupId>ch.qos.logback</groupId><artifactId>logback-core</artifactId></exclusion></exclusions>

?可以看到用了排除依賴后相關jar包就不存在了


4.依賴的作用范圍

依賴的jar包,在默認情況下,可以在任何地方使用,或者也可以通過<scope></ scope>標簽來設置相應jar包的作用范圍

作用范圍:

  • 主程序范圍有效(main文件夾內)
  • 測試程序范圍有效(test文件夾范圍內)
  • 是否參與打包運行(package指令范圍內)

?scope標簽值與對應的作用范圍

案例:

設置logback的jar包的范圍為test,實現只能在test測試程序中運行

?注意不要忘了點擊更新

?接下來測試是否更改了作用范圍:

1.在test中使用logback的jar包對象,可以看到有提示相應的jar包

2.在main中使用則會發現并沒有相應的jar包


5.依賴的生命周期

在Maven中有三套相互獨立的生命周期

  • clean 負責清理上一次編譯產生的字節碼文件
  • default 核心工作 負責編譯、測試、打包、安裝、部署等等
  • site 生成報告、發布站點等

每一套生命周期都有許多的生命周期階段,但是我們需要用到的生命周期并不需要太多,只需要掌握以下幾個核心生命周期的階段即可

?核心的生命周期階段

  • clean 移除上一次構建生成的文件
  • compile編譯項目的源代碼
  • test使用合適的單元測試框架運行測試
  • package將編譯后的文件進行打包
  • install安裝項目到本地倉庫

注意:同一套的生命周期的運行是由循序的,后面的生命周期的運行是需要依賴前面的生命周期的運行。所以如果使用后面的生命周期階段,就會自動執行前面的生命周期

比如運行test,會自動運行validate與compile,但是不會運行clean,因為clean與這些不是同一套的生命周期

運行指定的生命周期

有兩種方式運行指定的生命周期

第一種,找到右側欄中的maven打開項目下的生命周期,找到對應周期雙擊運行即可

第二種,在idea或者cmd中輸入指令 mvn xxx即可執行對應的生命周期階段

周期跳過

在工程文件中找到生命周期,找到小閃電圖標,點擊即可跳過對應的生命周期。


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

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

相關文章

springboot 使用zookeeper實現分布式隊列

一.添加ZooKeeper依賴&#xff1a;在pom.xml文件中添加ZooKeeper客戶端的依賴項。例如&#xff0c;可以使用Apache Curator作為ZooKeeper客戶端庫&#xff1a; <dependency><groupId>org.apache.curator</groupId><artifactId>curator-framework</…

【java安全】Log4j反序列化漏洞

文章目錄 【java安全】Log4j反序列化漏洞關于Apache Log4j漏洞成因CVE-2017-5645漏洞版本復現環境漏洞復現漏洞分析 CVE-2019-17571漏洞版本漏洞復現漏洞分析 參考 【java安全】Log4j反序列化漏洞 關于Apache Log4j Log4j是Apache的開源項目&#xff0c;可以實現對System.out…

英語——構詞法

按照語言一定的規律創造新詞的方法就叫作構詞法。英語中常見的構詞法包括六種:合成法、派生法、轉化法、混合法、截短法和首尾字母結合法。其中后三種將在第四節“縮寫和簡寫”中進行講解。 第一節 合成法 英語構詞法中把兩個單詞連在一起合成一個新詞,前一個詞修飾或限定后…

前端性能優化——包體積壓縮插件,打包速度提升插件,提升瀏覽器響應的速率模式

前端代碼優化 –其他的優化可以具體在網上搜索 壓縮項目打包后的體積大小、提升打包速度&#xff0c;是前端性能優化中非常重要的環節&#xff0c;結合工作中的實踐總結&#xff0c;梳理出一些 常規且有效 的性能優化建議 ue 項目可以通過添加–report命令&#xff1a; "…

innodb索引與算法

B樹主鍵插入 B樹在innodb的插入有三種模式page_last_insert, page_dirction, page_N_direction 而在bustub里面的B樹就是page_N_direction,如果是自增主鍵的話&#xff0c;就是上面這樣的插入法 FIC優化 (DDL) 選擇性統計 覆蓋索引 MMR ICP優化 自適應hash 全文索引 MySQL…

Rust之編寫自動化測試

1、測試函數的構成&#xff1a; 在最簡單的情形下,Rust中的測試就是一個標注有test屬性的函數。屬性 (attribute)是一種用于修飾Rust代碼的元數據。只需要將#[test]添加到關鍵字fn的上一行便可以將函數轉變為測試函數。當測試編寫完成后,我們可以使用cargo test命令來運行測試…

Flink-----Standalone會話模式作業提交流程

1.Flink的Slot特點: 均分隔離內存,不隔離CPU可以共享:同一個job中,不同算子的子任務才可以共享同一個slot,同時在運行的前提是,屬于同一個slot共享組,默認都是“default”2.Slot的數量 與 并行度 的關系 slot 是一種靜態的概念,表示最大的并發上線并行度是個動態的概念…

List和ObservableCollection和ListBinding在MVVM模式下的對比

List和ObservableCollection和ListBinding在MVVM模式下的對比 List 當對List進行增刪操作后&#xff0c;并不會對View進行通知。 //Employee public class Employee : INotifyPropertyChanged {public event PropertyChangedEventHandler? PropertyChanged;public string N…

Vue-13.創建完整的Vue項目(vue+vue-cli+js)

前言 之前寫了命令創建Vue項目&#xff0c;但是事實上我們可以直接用編譯器直接創建項目&#xff0c;這里我使用webstorm&#xff08;因為我是前后端兼修的所以我習慣使用Idea家族的編譯器&#xff09; 只寫前端的推薦用VsCode前后端都寫的推薦用webstorm 新建項目 項目初始…

確保Django項目的穩定運行和持續改進

確保Django項目的穩定運行和持續改進 引言 Django是一個強大的Python Web框架&#xff0c;用于構建高效、可靠的Web應用程序。然而&#xff0c;部署一個Django項目并不意味著工作已經完成。在項目上線之后&#xff0c;確保項目的穩定運行并不斷進行改進是非常重要的。本博客將…

vscode 安裝勾選項解釋

1、通過code 打開“操作添加到windows資源管理器文件上下文菜單 &#xff1a;把這個兩個勾選上&#xff0c;可以對文件使用鼠標右鍵&#xff0c;選擇VSCode 打開。 2、將code注冊為受支持的文件類型的編輯器&#xff1a;不建議勾選&#xff0c;這樣會默認使用VSCode打開支持的相…

《Linux從練氣到飛升》No.15 Linux 環境變量

&#x1f57a;作者&#xff1a; 主頁 我的專欄C語言從0到1探秘C數據結構從0到1探秘Linux菜鳥刷題集 &#x1f618;歡迎關注&#xff1a;&#x1f44d;點贊&#x1f64c;收藏??留言 &#x1f3c7;碼字不易&#xff0c;你的&#x1f44d;點贊&#x1f64c;收藏??關注對我真的…

微信小程序通用字體代碼

下面是一個簡單的微信小程序通用字體代碼示例&#xff1a; // 在app.wxss中設置全局字體樣式 import ./styles/fonts.wxss;// 在fonts.wxss中定義字體樣式 font-face {font-family: CustomFont;src: url(font.ttf) format(truetype); }// 在page.wxss中使用自定義字體樣式 .cus…

SASS 學習筆記 II

SASS 學習筆記 II 上篇筆記&#xff0c;SASS 學習筆記 中包含&#xff1a; 配置 變量 嵌套 這里加一個擴展&#xff0c;嵌套中有一個 & 的用法&#xff0c;使用 & 可以指代當前 block 中的 selector&#xff0c;后面可以追加其他的選擇器。如當前的 scope 是 form&a…

GuLi商城-前端基礎Vue-使用Vue腳手架進行模塊化開發

自己親自實踐&#xff1a; mac安裝webpack webpack 簡介Webpack 是一個非常流行的前端構建工具&#xff0c;它可以將多個模塊&#xff08;包括CSS、JavaScript、圖片等&#xff09;打包成一個或多個靜態資源文件&#xff08;bundle&#xff09;&#xff0c;以便用于部署到生產…

19c_ogg搭建

1.環境介紹 源端&#xff1a;192.168.56.101 目標端&#xff1a;192.168.56.100 背景&#xff1a;數據從主庫cdb主機定位&#xff0c;同步到從庫 2.配置ogg 2.1 開啟歸檔、強制日志、補充日志 --ogg 主備都需要配置 SQL> alter database archivelog; SQL> alter databa…

【Axure高保真原型】JS日期選擇器篩選中繼器表格

今天和大家分享JS日期選擇器篩選中繼器表格的原型模板&#xff0c;通過調用瀏覽器的日期選擇器&#xff0c;所以可以獲取真實的日歷效果&#xff0c;具體包括哪一年二月份有29天&#xff0c;幾號對應星期幾&#xff0c;都是真實的&#xff0c;獲取日期值后&#xff0c;通過交互…

接口測試,負載測試,并發測試,壓力測試區別

接口測試 1.定義&#xff1a;接口測試是測試系統組件間接口的一種測試。接口測試主要用于檢測外部系統與系統之間以及內部各個子系統之間的交互點。測試的重點是要檢查數據的交換&#xff0c;傳遞和控制管理過程&#xff0c;以及系統間的相互邏輯依賴關系等。 2.目的&#xf…

原型與繼承

原型與繼承 在 JavaScript 中&#xff0c;對象有一個特殊的隱藏屬性 [[Prototype]]&#xff08;如規范中所命名的&#xff09;&#xff0c;它要么為 null&#xff0c;要么就是對另一個對象的引用。該對象被稱為“原型。 當我們從 object 中讀取一個缺失的屬性時&#xff0c;Jav…

使用Julia實現A*路徑尋找算法:一個深入的指南

第一部分&#xff1a;簡介與背景 1. 引言 Julia&#xff0c;作為一種高效、靈活且易于學習的編程語言&#xff0c;逐漸在科學計算、數據分析和機器學習等領域中占據一席之地。當我們談到路徑規劃或游戲開發時&#xff0c;A_算法&#xff08;A Star Algorithm&#xff09;常常…