maven筆記

maven介紹和作用

Maven 是一款為 Java 項目構建管理、依賴管理的工具(軟件),使用 Maven 可以自動化構建、測試、打包和發布項目,大大提高了開發效率和質量。

主要作用的理解:

依賴管理:

在編寫項目時我們需要許多第三方依賴,有maven后子需要將依賴項的信息編寫到Maven工程的配置文件,Maven軟件會自動下載并復制這些依賴到項目中,也會自動下載依賴所需要的依賴(確保依賴版本無誤)

構建管理:

項目開發后想要將項目打包成.war文件,并部署到服務器中運行;使用maven可以通過一行構建命令(mvn package)快速構建和打包

idea也可以構建項目,為什么要使用maven呢?

原因1:maven構建觸發方便

原因2:開發項目的軟件有很多,每個軟件的項目結構都不相同,使用maven構建可以統一結構

Packaging定義規則:

? 指示將項目打包為什么類型的文件,idea根據packaging值,識別maven項目類型!

? packaging 屬性為 jar(默認值),代表普通的Java工程(Java類文件,資源文件),打包以后是.jar結尾的文件。

? packaging 屬性為 war,代表Java的web工程(Java文件,jsp文件,html/cssjs文件,配置文件),打包以后.war結尾的文件。

? packaging 屬性為 pom,代表不會打包,用來做繼承的父工程。

依賴管理

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">?

? <modelVersion>4.0.0</modelVersion>

? <!--gavp屬性,不會改變-->

? <groupId>com.atguigu</groupId>

? <artifactId>maven-javase-project-02</artifactId>

? <!--構建過程,部署時修改-->

? <version>1.0-SNAPSHOT</version>

??<!--maven工程的打包方式 java jar[默認值]; web war;? 不打包 pom-->

? <packaging>war</packaging>

? <!--第三方依賴信息

? dependencies?? -項目依賴信息的集合

???? dependency?? -每個依賴項

??????? [gav]???? -依賴的信息就是其他被打包成maven的工程(該工程被打包成jar

???? 如何知道第三方依賴的信息呢?

???? 1 使用官網查詢 http://mvnrepository.com

???? 2 使用插件 maven-search

???????? 點擊tools(工具) -maven-search 直接搜索插件即可

????

???? 擴展:

???? 1 提取版本號統一管理(自定義一個標簽提取版本號到該標簽)————————properties<>中設置

???? 2 可選屬性scope——————設置在dependency中(標明依賴可以使用的范圍)

???????? scope————引入依賴的作用

???????? 默認是compile? 代表該依賴可以在main中使用,也可以在test中使用,在打包和運行時都有效

???????? 設置為test 該依賴只能在test中使用(例如單元測試方法的依賴)

???????? 設置為runtime? main中不會用,test不會用 在打包和運行時會使用(一般是反射的時候使用)

???????????????????????????? 例如:mysql Class.format(com.mysql.cj.jdbc.Driver)

???????? 設置為provided?? main中會使用,在test中會使用,在打包和運行時會使用? 例如:Servlet??????

???? 總結:scope是一種錦上添花的手段,如果掌握不好,就全部默認值????????????????

????????

? -->

? <!--聲明版本號-->

? <properties>

??? <!--統一管理

??? 聲明一個變量來接收版本號,變量聲明以后,在其他位置可以引用 ${jackson.version(變量名)}

??? 注意:聲明的標簽建議兩層以上命名,推薦 技術名.version

??? -->

??? <jackson.version>2.18.2</jackson.version>

? </properties>

? <dependencies>

??? <dependency>

????? <!--定位信息gav三個屬性是必須的-->

????? <groupId>com.fasterxml.jackson.core</groupId>

????? <artifactId>jackson-core</artifactId>

????? <version>${jackson.version}</version>

????? <scope>compile</scope>

??? </dependency>

??? <dependency>

????? <groupId>junit</groupId>

????? <artifactId>junit</artifactId>

????? <version>4.13.2</version>

????? <scope>test</scope>

??? </dependency>

? </dependencies>

</project>

依賴傳遞與依賴沖突

**依賴傳遞**指的是當一個模塊或庫 A 依賴于另一個模塊或庫 B,而 B 又依賴于模塊或庫 C,那么 A 會間接依賴于 C。這種依賴傳遞結構可以形成一個依賴樹。當我們引入一個庫或框架時,構建工具(如 Maven、Gradle)會自動解析和加載其所有的直接和間接依賴,確保這些依賴都可用

?????????? 依賴傳遞:導入依賴會自動導入依賴的依賴!(compile dependenices)

????????????????????? 簡化依賴的導入,確保依賴的版本無沖突

?????????? 依賴沖突:發現要導入已經存在的依賴(重復依賴)會終止依賴傳遞!避免循環依賴和重復依賴問題

?????????? 依賴沖突發生場景:重復依賴

?????????? 例如

???????????????? A——需要 B 1.0

???????????????? C——需要 B 2.0

??????????? 現要導入A與C依賴那么B應該是那個版本

??????????? 依賴沖突解決原則:

??????????? 第一原則:誰短誰優先(看應用的路徑長度)

??????????? A-C-B1.0

??????????? F-B2.0

??????????? 那么導入的應該是 A C F B2.0

??????????? 第二原則:誰上誰優先(看dependencies聲明的先后順序)

??????????? A-B1.0

??????????? F-B2.0

??????????? 那么導入應該是A,F,B1.0

??????????? 注意:只要發生沖突了,后續的依賴傳遞全部終止? ??

??????????? 前提:

???????????????? A 1.1 -> B 1.1 -> C 1.1

???????????????? F 2.2 -> B 2.2

??????????? pom聲明:

?????????????????????? F 2.2

?????????????????????? A 1.1??

?????????????????????? B 2.2

???????????? 那么會得到F2.2,B2.2,A1.1 (不會引入C1.1,只要發生沖突了,后續的依賴傳遞全部終止!)?

依賴傳遞的作用是:---------------------------------自動導入依賴的依賴

1. 減少重復依賴:當多個項目依賴同一個庫時,Maven 可以自動下載并且只下載一次該庫。這樣可以減少項目的構建時間和磁盤空間。

2. 自動管理依賴: Maven 可以自動管理依賴項,使用依賴傳遞,簡化了依賴項的管理,使項目構建更加可靠和一致。

3. 確保依賴版本正確性:通過依賴傳遞的依賴,之間都不會存在版本兼容性問題,確實依賴的版本正確性

依賴沖突-------------------------當發生重復依賴導入會終止依賴傳遞

maven自動解決依賴沖突問題能力,會按照自己的原則,進行重復依賴選擇

依賴下載失敗解決方案

解決方案:

1. 檢查網絡連接和 Maven 倉庫服務器狀態。

2. 確保依賴項的版本號與項目對應的版本號匹配,并檢查 POM 文件中的依賴項是否正確。

3.清除本地 Maven 倉庫緩存 (lastUpdated 文件),因為只要存在lastupdated緩存文件,刷新也不會重新下載。本地倉庫中,根據依賴的gav屬性依次向下查找文件夾,最終刪除內部的文件,刷新重新下載即可!

?構建管理

構建概念:

項目構建是指將源代碼、依賴庫和資源文件等轉換成可執行或可部署的應用程序的過程,在這個過程中包括編譯源代碼、鏈接依賴庫、打包和部署等多個步驟。

主動觸發場景:

- 重新編譯 : 編譯不充分, 部分文件沒有被編譯!

- 打包 : 獨立部署到外部服務器軟件,打包部署

- 部署本地或者私服倉庫 : maven工程加入到本地或者私服倉庫,供其他工程使用

構建步驟

命令方式構建:

語法: mvn 構建命令? 構建命令....

注意:

1命令執行需要我們進入到項目的根路徑

2部署必須時jar包形式

可視化方式構建.

構建命令周期:觸發周期后的命令會自動觸發同一周期前的命令!

作用:是一種簡化觸發構建命令過程

是一個有序的構建命令容器

清理周期:clean

構建周期:compile? test? package? install/deploy

報告周期: site

例如:想要打包,就直接package即可,不需要compile? test? package? (因為會自動觸發執行compiletest 但不會觸發clean ) 故而打包的最佳方案應是mvn clean package

我們執行的是周期命令

繼承與聚合

繼承特性的理解

繼承概念:

Maven 繼承是指在 Maven 的項目中,讓一個項目從另一個項目中繼承配置信息的機制。繼承可以讓我們在多個項目中共享同一配置信息,簡化項目的管理和維護工作。

繼承作用

??? 作用:在父工程中統一管理項目中的依賴信息,進行統一版本管理!

??? 它的背景是:

??? - 對一個比較大型的項目進行了模塊拆分。

??? - 一個 project 下面,創建了很多個 module。

??? - 每一個 module 都需要配置自己的依賴信息。

??? 它背后的需求是:

??? - 多個模塊要使用同一個框架,它們應該是同一個版本,所以整個項目中使用的框架版本需要統一管理。

??? 通過在父工程中為整個項目維護依賴信息的組合既保證了整個項目使用規范、準確的 jar 包;又能夠將以往的經驗沉淀下來,節約時間和精力。

例如:

在一個父工程下不同子工程需要同一個依賴的版本不同;可以在父工程中聲明版本,

思路一:直接在父工程中引入依賴<dependenies <denpendency gav(會出現子工程會將不需要的依賴也導入進來)

思路二:父工程引入依賴,只做依賴版本的聲明 <dependeniesManagement? <dependenies <denpendency gav(專門為版本管理聲明,不會正真導入依賴,只會做一個配置的聲明)---------------------------在子工程中導入依賴時就只需要寫ga即可不需要再聲明版本了

聚合關系實現和作用

1. 聚合概念------------------------------------(統一構建:在父工程中構建就可以觸發子工程)

??? Maven 聚合是指將多個項目組織到一個父級項目中,通過觸發父工程的構建,統一按順序觸發子工程構建的過程!!

2. 聚合作用

??? 1. 統一管理子項目構建:通過聚合,可以將多個子項目組織在一起,方便管理和維護。

??? 2. 優化構建順序:通過聚合,可以對多個項目進行順序控制,避免出現構建依賴混亂導致構建失敗的情況。

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

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

相關文章

模板-C++提高編程

C的一種編程思想稱為泛型編程&#xff0c;用到的技術就是模板 C提供兩種模板&#xff1a;函數模板和類模板。 1.函數模板 1.函數模板作用 建立一個通用函數&#xff0c;其返回值類型和形參類型可以用一個虛擬的類型來代替,提高代碼復用性&#xff0c;將類型參數化。 2.語法…

基于Asp.net的物流配送管理系統

作者&#xff1a;計算機學姐 開發技術&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源碼”。 專欄推薦&#xff1a;前后端分離項目源碼、SpringBoot項目源碼、Vue項目源碼、SSM項目源碼、微信小程序源碼 精品專欄&#xff1a;…

順序表和鏈表的對比(一)

前言 今天給小伙伴們分享的是在數據結構中順序表和鏈表的對比。它們在計算機科學和軟件開發中具有廣泛的應用&#xff0c;是理解更復雜數據結構&#xff08;如棧、隊列、樹、圖等&#xff09;的基礎。這次將會給大家從定義初始化&#xff0c;以及功能增刪查改上進行詳細對比&a…

星越L_外后視鏡使用講解

目錄 1.外后視鏡調節 2后視鏡折疊 3.后視鏡加熱 1.外后視鏡調節 L控制左邊后視鏡調節,上下撥動調整視野,一般此鏡左右21分,上下55開。 R控制左邊后視鏡調節,上下撥動調整視野,一般此鏡左右13分,上下55開。 2后視鏡折疊 車輛解鎖自動展開 車輛關閉自動折疊 嚴寒天氣…

DevOps實踐:持續集成與持續部署完全指南

文章目錄 引言&#xff1a;從人工到自動化的進化革命一、CI/CD核心認知升級1.1 持續集成 vs 持續部署 vs 持續交付1.2 中小團隊為什么要實施CI/CD&#xff1f; 二、CI/CD工具鏈選型指南2.1 中小團隊推薦技術棧2.2 工具對比決策矩陣 三、實戰五步構建企業級流水線3.1 基礎環境搭…

【數據結構】數據結構,算法 概念

0.本篇問題&#xff1a; 數據、數據元素、數據對象、數據項之間的基本關系&#xff1f;ADT是什么&#xff1f;數據結構的三要素&#xff1f;數據的邏輯結構有哪些&#xff1f;數據的存儲結構有哪些&#xff1f;算法的五個特征&#xff1f;O(1) O(logn) O(n^n) O(n) O(n^2…

同步Oracle及mysql至KADB的KFS配置文件參考

Oracle源端flysync.ini文件 注意&#xff1a;oracle用戶名大寫 mysql源端flysync.ini文件 附&#xff1a;目標端KADB的flysync.ini文件 [m_kes_3113] 源端為KES kufl-port3113 datasource-typekingbase rolemaster replication-host10.4.43.53 replication-port54321 …

PECL(Positive Emitter-Coupled Logic)電平詳解

一、PECL電平的定義與核心特性 PECL&#xff08;正射極耦合邏輯&#xff09;是一種基于 射極耦合邏輯&#xff08;ECL&#xff09;技術 的高速差分信號標準&#xff0c;采用 正電源供電&#xff08;如5V或3.3V&#xff09;。其核心特性包括 高速傳輸、低噪聲、強抗干擾能力&am…

以 ArcGIS Pro 為筆,繪就水墨地圖畫卷

一、引言 水墨畫&#xff0c;作為中國傳統繪畫藝術的瑰寶&#xff0c;以其獨特的韻味和表現力&#xff0c;在藝術領域占據著重要地位。它通過水與墨的交融&#xff0c;展現出山水之間的靈動與韻味。 而將這種藝術形式與現代地理信息系統&#xff08;GIS&#xff09;技術相結合…

軟考網絡安全專業

隨著信息技術的迅猛發展&#xff0c;網絡安全問題日益凸顯&#xff0c;成為社會各界普遍關注的焦點。在這樣的背景下&#xff0c;軟考網絡安全專業應運而生&#xff0c;為培養高素質的網絡安全人才提供了有力支撐。本文將對軟考網絡安全專業進行深入剖析&#xff0c;探討其在信…

在線 SQL 轉 SQLAlchemy:一鍵生成 Python 數據模型

一款高效的在線 SQL 轉 SQLAlchemy 工具&#xff0c;支持自動解析 SQL 語句并生成 Python SQLAlchemy 模型代碼&#xff0c;適用于數據庫管理、后端開發和 ORM 結構映射。無需手寫 SQLAlchemy 模型&#xff0c;一鍵轉換 SQL 結構&#xff0c;提升開發效率&#xff0c;簡化數據庫…

自定義tiptap插件

本文為開發開源項目的真實開發經歷&#xff0c;感興趣的可以來給我的項目點個star&#xff0c;謝謝啦~ 具體博文介紹&#xff1a; 開源&#xff5c;Documind協同文檔&#xff08;接入deepseek-r1、支持實時聊天&#xff09;Documind &#x1f680; 一個支持實時聊天和接入 - 掘…

網絡安全需要學多久才能入門?

網絡安全是一個復雜且不斷發展的領域&#xff0c;想要入行該領域&#xff0c;我們需要付出足夠多的時間和精力好好學習相關知識&#xff0c;才可以獲得一份不錯的工作&#xff0c;那么網絡安全需要學多久才能入門?我們通過這篇文章來了解一下。 學習網絡安全的入門時間因個人的…

EG82088串口邊緣計算網關

EG82088串口邊緣計算網關 EG8208是一款專業級8路獨立隔離型RS485通訊控制器,通過Modbus及JSON支持、靈活的TCP/IP和UDP切換、內置監控自診斷等特性,廣泛應用于工業自動化、樓宇管理等領域,為用戶提供卓越的數據采集和設備管理解決方案。 接口類型&#xff1a;8RS485/8DO/1LAN協…

Linux下GCC和C++實現帶多組標簽的Snowflake SQL查詢批量數據導出程序

設計一個基于多個帶標簽Snowflake SQL語句作為json配置文件的Linux下GCC的C代碼程序&#xff0c;實現根據不同的輸入參數自動批量地將Snowflake數據庫的數據導出為CSV文件到本地目錄上&#xff0c;標簽加擴展名.csv為導出數據文件名&#xff0c;文件已經存在則覆蓋原始文件。需…

Trae AI 輔助修復uniapp 微信小程序的Bug

一、transparent的兼容問題 設計稿&#xff1a; 實際在iphone 6 plu上&#xff1a; 直接讓Trae AI修復&#xff1a; 修改后驗證通過。 二、v-if分支中子元素根據輸入框中內容長度動態添加class樣式失效 遇到了個“怪問題”&#xff0c;在其他手機或者開發者工具都正常。也…

conda install 和 pip install 的區別

conda install 和 pip install 是兩個常用的包安裝命令&#xff0c;但它們在很多方面存在差異。 1. 所屬管理系統不同 1.1 conda install conda install 是Anaconda和Miniconda發行版自帶的包管理工具 conda 的安裝命令。conda 是一個跨平臺的開源包管理系統和環境管理系統&…

uni-app App 端分段導出 JSON 數據為文件

在開發過程中&#xff0c;我們經常需要將大量數據導出為 JSON 文件&#xff0c;尤其是在處理長列表或大數據集時。然而&#xff0c;直接將所有數據寫入一個文件可能會導致性能問題&#xff0c;尤其是在移動設備上。為了優化性能并提高用戶體驗&#xff0c;我們可以將數據分段導…

視頻推拉流EasyDSS案例分析:互聯網直播/點播技術與平臺創新應用

隨著互聯網技術的快速發展&#xff0c;直播/點播平臺已成為信息傳播和娛樂的重要載體。特別是在電視購物領域&#xff0c;互聯網直播/點播平臺與技術的應用&#xff0c;不僅為用戶帶來了全新的購物體驗&#xff0c;也為商家提供了更廣闊的營銷渠道。傳統媒體再一次切實感受到了…

MySQL再次基礎 向初級工程師邁進

作者&#xff1a;在計算機行業找不到工作的大四失業者 Run run run ! ! ! 1、MySQL概述 1.1數據庫相關概念 1.2MySQL數據庫 2、SQL 2.1SQL通用語法 SQL語句可以單行或多行書寫&#xff0c;以分號結尾。SQL語句可以使用空格/縮進來增強語句的可讀性。MySQL數據庫的SQL語句不區…