maven【maven】技術詳解

Maven

  • Maven的本質是項目管理工具,將項目開發和管理過程抽象成一個項目對象模型(POM)

  • Project Object Model:項目對象管理模型

  • 作用:

    • 項目構建:提供標準的、跨平臺的自動化項目構建方式
    • 依賴管理:方便快捷的管理項目依賴的資源(jarbao),避免資源間的版本沖突問題
      在這里插入圖片描述

1.下載與安裝

  • 1.下載:在官網中找到對應版本的maven進行下載,解壓到需要安裝的目錄下即完成了安裝
  • 2.配置:添加環境變量:MAVEN_HOME,以及在path中添加:%MAVEN_HOME%\bin
  • 3.本地倉庫配置:在maven文件下找到conf文件夾,打開里面的setting.xml

  • 5.倉庫控制:
    在這里插入圖片描述

2.倉庫

  • 用于存儲資源,包含各種jar包

在這里插入圖片描述

在這里插入圖片描述

3.坐標

  • 用于描述倉庫中資源的位置

在這里插入圖片描述

在這里插入圖片描述

4.Maven工程制作

1)手動制作

1.Maven項目構建命令

在這里插入圖片描述

  • 項目結構:
    在這里插入圖片描述

在這里插入圖片描述

5.Maven的IDEA生成

pom.xml文件的說明:

<?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/maven-v4_0_0.xsd"><!--指定pom的模型版本--><modelVersion>4.0.0</modelVersion><!--打包方式,web工程打包為war,java工程打包為jar--><packaging>war</packaging><!--組織id--><groupId>com.itheima</groupId><!--項目id--><artifactId>web01</artifactId><!--版本號:release,snapshot--><version>1.0-SNAPSHOT</version><!--設置當前工程的所有依賴--><dependencies><!--具體的依賴--><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency></dependencies><!--構建--><build><!--設置插件--><plugins><!--具體的插件配置--><plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><version>2.1</version><configuration><port>80</port><path>/</path></configuration></plugin></plugins></build></project>

6.依賴

1)依賴

  • 指當前項目運行需要用到的jar包(指別人開發的資源模塊)
    在這里插入圖片描述

2)依賴傳遞

  • 依賴具有傳遞性:
    • 直接依賴:在當前項目中通過配置建立的依賴關系
    • 間接依賴:被依賴的資源如果依賴其他資源,則當前項目是間接依賴其他資源的
1.依賴傳遞沖突
  • 路徑優先:當依賴中出現相同的資源時,層級越深,優先級越低,層級越淺,優先級越高
  • 聲明優先:當資源在相同層級被依賴時,配置順序靠前的資源覆蓋配置順序靠后的
  • 特殊優先:當同級配置了相同資源的不同版本,則后配置的覆蓋先配置的
    在這里插入圖片描述
    在這里插入圖片描述
2.可選依賴
  • 可選依賴指對外隱藏當前所依賴的資源–不透明
  • 在配置資源時,添加:<optional>true<optional>

在這里插入圖片描述

在project03中對外隱藏對junit資源的依賴,在project02中能看到priject03依賴的其他資源,而無法看到project03對junit的依賴
在這里插入圖片描述

3.排除依賴
  • 排除依賴指主動斷開依賴的資源,被排除的資源無需指定版本
    在這里插入圖片描述

在project02中引入project03的依賴時,不需要用到project03的log4j資源時,在project02配置project03時添加需要排除的依賴名稱:這樣在project02中就不會傳遞project03中的log4j資源
在這里插入圖片描述

4.依賴范圍
  • 依賴的jar默認情況都可以使用,可以通過scope標簽設定作用范圍
  • 作用范圍:
    • 主程序范圍有效(main文件夾范圍內)
    • 測試程序范圍有效(test文件夾范圍內)
    • 是否參與打包(package指令范圍內)
      在這里插入圖片描述
依賴范圍傳遞

在這里插入圖片描述

7.生命周期與插件

1)項目構建生命周期
  • 生命周期:由項目編譯到安裝到maven庫中的一次構建過程

  • Maven對項目構建的生命周期分為三階段:

    • clean:
      在這里插入圖片描述

    • default:
      在這里插入圖片描述
      在這里插入圖片描述

    • site:
      在這里插入圖片描述

2)插件
  • 插件與生命周期內的階段綁定,在執行到對應生命周期時執行對應的插件功能
  • 默認maven在各個生命周期上綁定有預設的功能
  • 通過插件可以自定義其他功能
    在這里插入圖片描述

在project03中配置插件,插件執行的階段為generate-test-resource,當運行test階段時,由于test在generate-test-resource階段后面,所以依然會執行插件的功能。
在這里插入圖片描述

Maven高級

1.分模塊開發與設計

  • 把一個大的項目,根據功能劃分為多個小的模塊
  • 模塊中只包含當前模塊對應的功能類與配置文件
  • spring核心配置根據模塊功能不同進行獨立制作
  • 當前模塊所依賴的模塊通過導入坐標的形式加入當前模塊之后,并且安裝到本地maven倉庫中才可以使用
  • web.xml需要加載所有的spring核心配置文件

在這里插入圖片描述

  • 1.ssm_pojo的拆分:

    • 拷貝原始項目對應的相關內容到ssm_pojo模塊中
      • 實體類
      • 配置文件(無)
  • 2.ssm_dao模塊的拆分:

    • 拷貝項目中dao文件下的所有內容
    • 對原始項目中其他bean的使用,比如使用到了ssm_pojo中的user類:
      • 將ssm_pojo的坐標直接導入到pom.xml文件中,將ssm_pojo作為一個資源導入到ssm_dao模塊中
      • 需要將ssm_pojo安裝到本地倉庫中 (install)
    • 配置文件中需要使用到的依賴復制到ssm_dao的pom.xml文件
      在這里插入圖片描述
  • 3.ssm_service模塊的拆分:

    • 將service相關的文件從原始項目中復制下來
    • 使用到了dao中的bean,于是將ssm_dao的模塊坐標導入到當前項目中:
      • 將ssm_dao的坐標直接導入到pom.xml文件中,將ssm_dao作為一個資源導入到ssm_service模塊中
      • 需要將ssm_dao安裝到本地倉庫中 (install)
    • 配置文件中需要使用到的依賴復制到ssm_service的pom.xml文件
      在這里插入圖片描述
  • 4.controller模塊拆分:

  • 1.將模塊設置為web-app模板
    在這里插入圖片描述

2.聚合

  • 當前項目結構中,所有模塊是層層嵌套的,如果中間某個模塊進行了更新,其他模塊如何將他們所依賴的模塊同步更新?
  • 創建一個管理工程,只用作模塊的管理:操作當前模塊就能打包或者編譯它管理的所有模塊
  • 在pom.xml中添加<packaging>pom</packaging>:定義該工程用于構建管理
  • 再添加:<modules></modules>里面則放入需要管理的工程模塊名稱
  • 相當于管理層,里面不包含任何代碼,只負責所有模塊的統一更新和版本升級

在這里插入圖片描述

3.繼承

  • 模塊依賴關系維護:多個模塊依賴的資源版本可能會有沖突
  • 使用一個總的依賴版本管理:在總的管理中列舉所有依賴以及統一的版本,然后各個子模塊只用對應用到的模塊<dependencyManagement></dependencyManagement>
  • 在子模塊中,定義父工程的坐標:指定哪個是總的依賴項:<parent></parent>
  • 子模塊中去掉每個依賴的版本,全部是從父工程的依賴中獲取版本號,groupId也可以省略,與父工程是用一個group

在這里插入圖片描述
在這里插入圖片描述

4.繼承與聚合的對比

  • 聚合:在父工程中可以明確知道有哪些模塊
  • 繼承:父工程模塊無法找到哪些子模塊是繼承了自己,通常都是在子模塊中配置父工程坐標
    在這里插入圖片描述

5.屬性

  • 我們定義一個自定義屬性<properties></properties>來統一版本名稱,統一管理依賴的版本
    在這里插入圖片描述

在這里插入圖片描述
在這里插入圖片描述

工程版本

在這里插入圖片描述
在這里插入圖片描述

資源配置

在這里插入圖片描述

  • 在對應模塊的pom.xml文件中定義對應的屬性,在<build></build>中配置文件對應信息,然后使用${}獲取該屬性:在模塊配置文件中讀取核心配置中的屬性值(這樣就把所有配置屬性集中到核心配置中管理)
    在這里插入圖片描述
    在這里插入圖片描述

多環境開發配置

多環境兼容

當開發和生成時需要在不同的環境下進行時,可以在pom.xml中定義多環境:
比如在開發中是在自己的服務器上運行,而生成時則是在總的服務器上運行,就可以通過多環境設置不同環境下的屬性:

<!--  創建多環境--><profiles>
<!--    定義具體的環境:生成環境--><profile>
<!--      定義環境對應的唯一名稱--><id>pro_env</id>
<!--      定義環境中換用的屬性--><properties><jdbc.url>jdbc:mysql://120.55.43.71:3306/ssm_db</jdbc.url></properties></profile>
<!--    定義具體的環境:開發環境--><profile><id>dep_env</id><properties><jdbc.url>jdbc:mysql://localhost:3306/ssm_db</jdbc.url></properties></profile></profiles>
  • 在運行程序的打包時,就可以指定對應的環境從而完成在不同屬性環境下的打包:

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

跳過測試

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

6.私服

  • 在公共服務器、中央服務器與本地倉庫中建立一種關系,使得多個開發人員能夠訪問到各自上傳的資源。
    在這里插入圖片描述

1.私服服務器

  • 1.安裝:
    在這里插入圖片描述
  • 2.運行:
    • 復制到需要安裝的路徑下,解壓出來重命名為nexus:進入到D:\nexus\nexus-3.20.1-01\bin目錄下執行cmd,輸入nexus /run nexus:啟動私服服務器
  • 3.訪問私服服務器:
    localhost:8081

在這里插入圖片描述

2.私服資源獲取

  • 宿主倉庫:hosted
    • 保存無法從中央倉庫獲取的資源
      • 自主研發
      • 第三方非開源項目
  • 代理倉庫:proxy
    • 代理遠程倉庫,通過nexus訪問其他公共倉庫,例如中央倉庫
  • 倉庫組:group
    • 將若干個倉庫組成一個群眾,簡化配置
    • 倉庫組不能保存資源,屬于設計型倉庫
      在這里插入圖片描述

3.登錄私服服務器

  • 1.創建hosted倉庫:
    在這里插入圖片描述

  • 2.將當前hosted倉庫添加:
    在這里插入圖片描述

  • 3.組件資源上傳:
    在這里插入圖片描述
    在這里插入圖片描述

4.ideal環境的資源上傳與下載

在這里插入圖片描述

  • 配置本地倉庫訪問私服的權限:用戶名+密碼配置
    在這里插入圖片描述

  • 配置本地倉庫資源的來源:
    在這里插入圖片描述

  • 也就是當需要用到資源時,從私服服務器的哪個地方下載:先是從中央倉庫找,如果中央倉庫找不到再從其他剩余倉庫找:
    在這里插入圖片描述
    在這里插入圖片描述

  • 在IDEA中配置需要將對應的版本發布配置:

    <distributionManagement><repository><id>heima-release</id><url>http://localhost:8081/repository/hiema-release/</url></repository><snapshotRepository><id>heima-snapshots</id><url>http://localhost:8081/repository/heima-snapshots/</url></snapshotRepository></distributionManagement>
  • 其中:對應版本需要通過倉庫url發布到對應的倉庫上:
    在這里插入圖片描述

  • 發布資源到私服命令:mvn deploy

在這里插入圖片描述


資源發布的流程

  • 1.在IDEA中配置了對應資源發布倉庫的url:
    • 如果是release的版本就會找到<repository></repository>中的url去訪問該倉庫地址
    • 如果是snapshot的版本就會找到 <snapshotRepository> </snapshotRepository>中的倉庫url訪問
  • 2.由于有權限限制,于是會根據id去本地倉庫中配置的xml文件中找到對應id的<server></server>然后根據配置的用戶名和密碼去訪問私服服務器
  • 3.將資源發布到對應的倉庫里面

在這里插入圖片描述

通過這樣的資源發布,可以將該私服服務器掛到一個云服務器上,然后在任何地方,任何一個人都可以將自己開發好的資源發布到該私服上,而其他人也可以在任意地方訪問該私服服務器,去下載同一個項目組中發布的資源,從而實現項目資源管理。

在這里插入圖片描述

*注:上述內容來自黑馬程序員的視頻學習,僅用作學習交流,不用作商業用途,如有侵權,聯系刪除。

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

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

相關文章

【操作系統-Day 25】死鎖 (Deadlock):揭秘多線程編程的“終極殺手”

Langchain系列文章目錄 01-玩轉LangChain&#xff1a;從模型調用到Prompt模板與輸出解析的完整指南 02-玩轉 LangChain Memory 模塊&#xff1a;四種記憶類型詳解及應用場景全覆蓋 03-全面掌握 LangChain&#xff1a;從核心鏈條構建到動態任務分配的實戰指南 04-玩轉 LangChai…

【嵌入式C語言】七

8.4函數的聲明和定義聲明一個函數意味著向編譯器描述函數名、返回值、參數個數和類型&#xff0c;但并不會為函數分配存儲空間定義一個函數意味著在聲明變量的同時還要有具體的實現&#xff0c;并且會為函數分配存儲空間8.5多源文件的函數聲明和定義8.6預處理指令#Include#incl…

hardhat3 源神 -- 啟動!

Hardhat 項目開發環境搭建完整指南 1. 從 GitHub 下載項目 # 使用 SSH 方式克隆&#xff08;需要配置 SSH key&#xff09; git clone gitgithub.com:NomicFoundation/hardhat.git# 或使用 HTTPS 方式 git clone https://github.com/NomicFoundation/hardhat.git# 進入項目目錄…

遇到 Git 提示大文件無法上傳確實讓人頭疼

遇到 Git 提示大文件無法上傳確實讓人頭疼&#xff0c;但別擔心&#xff0c;我們可以一步步來解決。為了讓你更清晰地了解整個流程&#xff0c;我先用一個表格來概括主要步驟&#xff1a;步驟核心操作關鍵命令/工具示例 (用于刪除歷史中的大文件)1. 定位大文件使用 Git 命令或工…

機器人控制器開發(傳感器層——奧比大白相機適配)

編譯OrbbecSDK_ROS2的代碼 執行命令 colcon buildros2 launch orbbec_camera dabai.launch.py問題1&#xff1a; 運行時報錯&#xff1a; [component_container-1] [ERROR] [1757153916.450795107] [camera.camera_container]: Failed to load library: Could not load library…

C語言(長期更新)第15講 指針詳解(五):習題實戰

C語言&#xff08;長期更新&#xff09;第15講 指針詳解&#xff08;五&#xff09;&#xff1a;習題實戰 跟著潼心走&#xff0c;輕松拿捏C語言&#xff0c;困惑通通走&#xff0c;一去不回頭~歡迎開始今天的學習內容&#xff0c;你的支持就是博主最大的動力。博主主頁&#…

數據倉庫概要

什么是數據倉庫&#xff1f; 數據倉庫是一個面向主題的、集成的、相對穩定的、反映歷史變化的數據集合&#xff0c;用于支持管理決策。 核心特征 1. 面向主題 數據倉庫圍繞核心業務主題&#xff08;如客戶、產品、銷售、財務&#xff09;來組織數據&#xff0c;而不是圍繞具體的…

python庫 Py2exe 的詳細使用(將 Python 腳本變為Windows獨立軟件包)

更多內容請見: python3案例和總結-專欄介紹和目錄 文章目錄 一、Py2exe 概述 1.1 Py2exe介紹 1.2 Py2exe安裝 1.3 替代工具推薦 二、基礎使用 2.1 編寫打包腳本 2.2 執行打包命令 2.3 完整案例 2.4 配置選項詳解 2.5 構建和分發 三、高級配置 3.1 包含隱藏導入 3.2 處理特殊包…

CuTe C++ 簡介02,gemm_device cuda kernel 的實現

《CuTe C 簡介01&#xff0c;從示例開始 》 中&#xff0c;最后看到了 計算 gemm 的cuda kernel&#xff0c;使用 NVIDIA CUTLASS 的 CUTe (CUDA Tile) 庫實現的高性能 GEMM (通用矩陣乘法) CUDA kernel。接下來解釋一下這個內核的各個部分。文末再貼一遍代碼&#xff0c;方便查…

萬代《寶可夢》主題新品扭蛋公開!史上最大尺寸

使用jQuery的常用方法與返回值分析 jQuery是一個輕量級的JavaScript庫&#xff0c;旨在簡化HTML文檔遍歷和操作、事件處理以及動畫效果的創建。本文將介紹一些常用的jQuery方法及其返回值&#xff0c;幫助開發者更好地理解和運用這一強大的庫。 1. 選擇器方法 jQuery提供了多種…

【FastDDS】Layer Transport ( 05-Shared Memory Transport)

6.4 共享內存傳輸 共享內存&#xff08;SHM&#xff09;傳輸依靠主機操作系統提供的共享內存機制&#xff0c;實現了在同一處理單元/機器上運行的實體之間的快速通信。注意 Fast DDS 利用域參與者&#xff08;DomainParticipant&#xff09;的 GuidPrefix_t 來識別在同一主機上…

記 2025/9/6

人工智能常見的模型按照處理問題分為6大類&#xff1a;處理權重問題的權重模型、處理狀態問題的狀態模型、處理序列問題的問題模型、處理表示問題的表示模型、處理相似度的相似模型、處理分類問題的分類模型。權重是計算特定狀態下事物的重要性。狀態問題是刻畫權重動態變化的過…

開啟Python之路,第一節學習大綱-從入門到進階

前端開啟Python之路&#xff0c;前端有沒有必要卷后端技術&#xff0c;歡迎各位大神批評指正 第一階段&#xff1a;基礎入門 (打好根基) 目標&#xff1a; 理解編程基本概念&#xff0c;掌握 Python 核心語法&#xff0c;能編寫簡單的腳本程序。 1、環境搭建與開發工具 安裝 Py…

webshell及冰蝎雙擊無法打開?

什么是webshell&#xff1f; web:萬維網 shell&#xff1a;是指一種應用程序&#xff0c;為用戶和系統之間建立連接&#xff0c;通過這個界面訪問操作系統內核的服務 webshell:是以asp、aspx、php、jsp或者cgi等網頁文件形式存在的一種命令執行環境&#xff0c;也可以將其稱做…

【星閃】Hi2821 | PWM脈寬調制模塊 + 呼吸燈例程

1. 簡介PWM&#xff08;Pulse Width Modulation&#xff09;&#xff0c;全稱脈寬調制&#xff0c;通過對一系列脈沖的寬度進行調制&#xff0c;等效出所需波形。即對模擬信號電平進行數字編碼&#xff0c;通過調節頻率、占空比的變化來調節信號的變化。一個 PWM 周期內由一段高…

51單片機---硬件學習(電子琴、主從應答模式、modbus模型、DS18B20傳感器顯示溫度)

一、串行通信與并行通信1、串行通信定義&#xff1a;數據一位一位地按順序通過單條傳輸線進行傳輸的通信方式。優點&#xff1a;傳輸線少&#xff0c;成本低&#xff0c;適合長距離傳輸缺點&#xff1a;傳輸速度相對較慢2、并行通信定義&#xff1a;數據的各位同時通過多條并行…

SpringBoot后端開發常用工具詳細介紹——SpringSecurity認證用戶保證安全

簡單的開始 創建SpringBoot項目 首先創建一個簡單的springboot項目&#xff0c;假設端口為8888&#xff0c;添加controller控制層&#xff0c;并在其中添加TestController控制類&#xff0c;那么啟動springboot項目之后&#xff0c;訪localhost:8888/api/message頁面會顯示my…

別再手工縫合API了!開源LLMOps神器LMForge,讓你像搭積木一樣玩轉AI智能體!

你是否受夠了這些&#xff1f; 剛調通OpenAI的API&#xff0c;老板說“咱們試試國產模型降本增效”&#xff0c;你看著滿屏的if-else只想說“我暈”。想給AI加上“查天氣”、“執行代碼”的能力&#xff0c;卻發現Function Calling的代碼復雜得讓人頭皮發麻。本地的Agentdemo驚…

window使用ffmep工具,加自定義腳本執行視頻轉碼成h264(運營人員使用)

技術文章大綱&#xff1a;ffmep配合腳本使用1. 需要提供腳本給視頻轉碼的給運營,給運營上傳視頻使用安裝ffmep windows版本(目前我使用的就是windows)將腳本里面的執行路徑修改成自己的電腦安裝ffmep/bin/ffmep.exe路徑處理好之后就點擊執行2.環境準備ffmep windows版解壓到一個…

Leetcode 240. 搜索二維矩陣 II 矩陣 / 二分

原題鏈接&#xff1a; Leetcode 240. 搜索二維矩陣 II 解法一&#xff1a;排除法 參考 【圖解】排除法&#xff0c;一圖秒懂&#xff01;&#xff08;Python/Java/C/C/Go/JS/Rust&#xff09; 從右上角&#xff1a; class Solution { public:bool searchMatrix(vector<vec…