Maven的概念與初識Maven

目錄

一、Maven的概念

1. 什么是Maven

2. 項目構建:從代碼到部署的標準化流程

2.1 Maven構建生命周期

2.2 傳統構建 vs Maven構建

3. 依賴管理:解決“JAR地獄”的利器

3.1 依賴聲明

3.2 依賴傳遞與沖突解決

4. Maven倉庫:依賴的存儲與分發

4.1 倉庫類型

4.2 配置鏡像倉庫

5. Maven模型

二、初識Maven

1. 安裝Maven

1.1 環境準備

1.2 配置步驟

2. 創建第一個Maven項目

2.1 項目結構

2.2 編寫POM文件

2.3?編寫代碼與測試

2.4?構建與運行

3.?Maven的第二個項目

3.1 項目結構

3.2 編寫POM文件

3.3?編寫代碼與測試

3.4 測試打包HelloFriend項目

四、常見問題與解決方案

五、總結


一、Maven的概念

1. 什么是Maven

1.1 Maven(意為“專家”)是一款專為Java項目設計的跨平臺項目管理工具,核心功能包括:

  • 項目構建:自動化編譯、測試、打包、部署。

    • 理想的項目構建:高度自動化,跨平臺,可重用的組件,標準化的流程

  • 依賴管理:自動下載和管理第三方庫(JAR包)。

  • 項目信息管理:統一維護項目元數據(如版本、開發者信息)。

1.2 為什么需要Maven?

  • 傳統構建的痛點

    • 手動操作:開發人員需手動編譯、測試、部署,效率低。

    • 依賴混亂:JAR包版本沖突,難以維護。

    • 缺乏標準化:不同開發者的環境配置差異導致協作困難。

  • Maven的解決方案

    • 約定優于配置:默認目錄結構(如src/main/java)減少配置成本。

    • 生命周期管理:通過命令(如mvn compile)自動化執行構建流程。

    • 中央倉庫支持:從全球倉庫自動下載依賴,避免手動管理。

2. 項目構建:從代碼到部署的標準化流程

2.1 Maven構建生命周期

Maven定義了三套生命周期,每個生命周期包含多個階段(Phase):

  1. Clean:清理項目(刪除target目錄)。

  2. Default:核心構建流程(編譯、測試、打包、安裝)。

  3. Site:生成項目文檔站點。

典型構建階段

mvn clean       # 清理
mvn compile     # 編譯主代碼
mvn test        # 運行單元測試
mvn package     # 打包為JAR/WAR
mvn install     # 安裝到本地倉庫
mvn deploy      # 部署到遠程倉庫

2.2 傳統構建 vs Maven構建

步驟傳統方式Maven方式
編譯手動執行javacmvn compile
測試手動運行JUnit測試類mvn test(自動執行所有測試)
依賴管理手動下載并配置JAR包聲明依賴,Maven自動下載
打包手動生成JAR/WAR文件mvn package(按POM配置生成包)

3. 依賴管理:解決“JAR地獄”的利器

3.1 依賴聲明

pom.xml中通過坐標(GAV)聲明依賴:

<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope>
</dependency>
  • GAVgroupId(組織標識)、artifactId(項目名)、version(版本)。

  • scope:控制依賴的作用范圍(如test表示僅測試階段有效)。

3.2 依賴傳遞與沖突解決

  • 依賴傳遞:若A依賴B,B依賴C,則A自動引入C。

  • 沖突解決:Maven采用最短路徑優先先聲明優先原則,避免版本沖突。

4. Maven倉庫:依賴的存儲與分發

4.1 倉庫類型

  1. 本地倉庫:默認位于~/.m2/repository,緩存下載的依賴。

  2. 遠程倉庫

    • 中央倉庫:Maven官方維護,包含絕大多數開源庫。

    • 私服:企業內部搭建,加速依賴下載并管理私有組件。

4.2 配置鏡像倉庫

settings.xml中配置阿里云鏡像加速下載:

<mirror><id>aliyun</id><name>Aliyun Maven</name><url>https://maven.aliyun.com/repository/public</url><mirrorOf>central</mirrorOf>
</mirror>

5. Maven模型

二、初識Maven

1. 安裝Maven

1.1 環境準備

  • JDK 1.8+:確保JAVA_HOME環境變量正確配置。

  • 下載Maven:從官網下載二進制包(如apache-maven-3.8.6-bin.zip)。

1.2 配置步驟

  1. 解壓到無中文路徑:如D:\Tools\apache-maven-3.8.6

  2. 設置環境變量

    • MAVEN_HOME:Maven解壓目錄。

    • Path:添加%MAVEN_HOME%\bin

  3. 驗證安裝

mvn -v
# 輸出示例:Apache Maven 3.8.6 ... Java version: 17.0.5

2. 創建第一個Maven項目

2.1 項目結構

Maven強制約定目錄結構,確保標準化:

Hello
├── src
│   ├── main
│   │   ├── java         # Java源代碼
│   │   └── resources    # 配置文件(如log4j.properties)
│   └── test
│       ├── java         # 測試代碼
│       └── resources    # 測試配置
├── target               # 構建輸出(編譯后的類、JAR包)
└── pom.xml              # 項目對象模型(核心配置文件)

2.2 編寫POM文件

<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><groupId>cn.tx.maven</groupId><artifactId>Hello</artifactId><version>0.0.1-SNAPSHOT</version><name>Hello</name><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.9</version><scope>test</scope></dependency>		</dependencies>
</project>

2.3?編寫代碼與測試

(1)主類:在src/main/java/cn/tx/maven目錄下新建文件Hello.java

package cn.tx.maven;
public class Hello {public String sayHello(String name){return "Hello "+name+"!";}
}

(2)測試類:在/src/test/java/cn/tx/maven目錄下新建測試文件HelloTest.java

package cn.tx.maven;
import org.junit.Test;
import static junit.framework.Assert.*;
public class HelloTest {@Testpublic void testHello(){Hello hello = new Hello();String results = hello.sayHello("maven");assertEquals("Hello maven!",results);		}
}

2.4?構建與運行

  • 打開cmd命令行,進入Hello項目根目錄執行 mvn compile命令,查看根目錄變化
  • cmd 中繼續錄入mvn clean命令,然后再次查看根目錄變化
  • cmd 中錄入 mvn clean compile命令, 查看根目錄變化
  • cmd 中錄入 mvn clean test命令,查看根目錄變化
  • cmd 中錄入 mvn clean package命令,查看根目錄變化
  • cmd 中錄入 mvn clean install 查看倉庫會把項目安裝到倉庫里

3.?Maven的第二個項目

3.1 項目結構

HelloFriend
├── src
│   ├── main
│   │   ├── java         # Java源代碼
│   │   └── resources    # 配置文件(如log4j.properties)
│   └── test
│       ├── java         # 測試代碼
│       └── resources    # 測試配置
├── target               # 構建輸出(編譯后的類、JAR包)
└── pom.xml              # 項目對象模型(核心配置文件)

3.2 編寫POM文件

<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><groupId>cn.tx.maven</groupId><artifactId>HelloFriend</artifactId><version>0.0.1-SNAPSHOT</version><name>HelloFriend</name><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.9</version><scope>test</scope></dependency>		<dependency><groupId>cn.tx.maven</groupId><artifactId>Hello</artifactId><version>0.0.1-SNAPSHOT</version><scope>compile</scope></dependency>		</dependencies>
</project>

3.3?編寫代碼與測試

(1)主類:在src/main/java/cn/tx/maven目錄下新建文件HelloFriend.java

package cn.tx.maven;import cn.tx.maven.Hello;public class HelloFriend {public String sayHelloToFriend(String name){Hello hello = new Hello();String str = hello.sayHello(name)+" I am "+this.getMyName();System.out.println(str);return str;}public String getMyName(){return "John";}}

(2)測試類:在/src/test/java/cn/tx/maven目錄下新建測試文件HelloFriendTest.java

package cn.tx.maven;import static junit.framework.Assert.assertEquals;import org.junit.Test;import cn.tx.maven.Hello;public class HelloFriendTest {@Testpublic void tesHelloFriend(){HelloFriend helloFriend = new HelloFriend();String results = helloFriend.sayHelloToFriend("zhangsan");assertEquals("Hello zhangsan! I am John",results);		}
}

3.4 測試打包HelloFriend項目

在HelloFriend目錄下執行命令mvn package

四、常見問題與解決方案

  1. 依賴下載失敗

    • 檢查鏡像配置:確保settings.xml中配置了可靠的鏡像源(如阿里云)。

    • 清理本地倉庫:刪除~/.m2/repository中損壞的依賴目錄,重新下載。

  2. 構建時報錯“找不到符號”

    • 檢查JDK版本:確保POM中配置的JDK版本與環境一致。

    • 重新編譯:執行mvn clean compile

  3. 插件兼容性問題

    • 更新插件版本:在Maven中央倉庫查找最新版本。

五、總結

Maven通過標準化構建流程自動化依賴管理,極大提升了Java項目的開發效率與協作能力。從安裝配置到創建第一個項目,再到管理復雜依賴,Maven始終是開發者不可或缺的工具。

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

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

相關文章

Unity-Shader詳解-其二

前向渲染和延遲渲染 前向渲染和延遲渲染總的來說是我們的兩種主要的渲染方式。 我們在Unity的Project Settings中的Graphic界面能夠找到渲染隊列的設定&#xff1a; 我們也可以在Main Camera這里進行設置&#xff1a; 那這里我們首先介紹一下兩種渲染&#xff08;Forward R…

C++ 中 std::tuple 使用詳解

C 中 std::tuple 使用詳解 基本概念 std::tuple 是 C11 引入的模板類&#xff0c;用于打包任意數量、任意類型的值在一起。可看作是類型安全的變長結構體。 #include <tuple>std::tuple<int, std::string, double> t(42, "hello", 3.14);創建 tuple 的…

WebRTC基于網頁的視頻會議,手寫WebRTC流程(html)

WebRTC是web real-time communication網頁及時通信的縮寫&#xff0c;通過javascript就可以實現網頁會話&#xff0c;基于瀏覽器開發出來多媒體應用&#xff0c; 以下是手寫的WEBRTC調用本地攝像頭的html代碼&#xff0c;直接用瀏覽器打開&#xff0c;就可以使用 <!DOCTYPE…

MyBatis 官方子項目詳細說明及表格總結

MyBatis 官方子項目詳細說明及表格總結 1. 核心子項目說明 1.1 mybatis-3 GitHub 鏈接&#xff1a;https://github.com/mybatis/mybatis-3功能&#xff1a; MyBatis 核心框架的源碼&#xff0c;提供 SQL 映射、動態 SQL、緩存、事務管理等核心功能。主要功能&#xff1a; 支持…

【虛幻C++筆記】碰撞檢測

目錄 碰撞檢測參數詳情示例用法 碰撞檢測 顯示名稱中文名稱CSphere Trace By Channel按通道進行球體追蹤UKismetSystemLibrary::SphereTraceSingleSphere Trace By Profile按描述文件進行球體追蹤UKismetSystemLibrary::SphereTraceSingleByProfileSphere Trace For Objects針…

推論階梯——AI與思維模型【81】

一、定義 推論階梯思維模型是一種用于分析和理解人們如何從觀察到的事實,經過一系列的假設、推理和判斷,最終得出結論的思維過程的理論框架。它將這個過程比喻為一個階梯,每一步都建立在前一步的基礎上,逐漸形成一個完整的推論。這個模型幫助我們意識到在思考和決策過程中…

小剛說C語言刷題——1109加密四位數

1.題目描述 某軍事單位用 4位整數來傳遞信息&#xff0c;傳遞之前要求先對這個 4 位數進行加密。加密的方式是每一位都先加上 5然后對 10取余數&#xff0c;再將得到的新數顛倒過來。 例如&#xff1a;原數是 1379 &#xff0c;那么每位加 55對 10 取余數的結果為 6824 &…

云服務器和獨立服務器的區別在哪

在當今數字化的時代&#xff0c;服務器成為了支撐各種業務和應用的重要基石。而在服務器的領域中&#xff0c;云服務器和獨立服務器是兩個備受關注的選項。那么&#xff0c;它們到底有何區別呢&#xff1f; 首先&#xff0c;讓我們來聊聊成本。云服務器通常采用按需付費的模式…

【前端】【業務場景】【面試】在前端開發中,如何優化 SVG(可縮放矢量圖形)的性能,特別是在處理復雜圖形和動畫時

SVG?性能優化&#xff1a;循序漸進 4?步法 目標&#xff1a;先減負 → 再復用 → 后加速 → 最后按場景微調 ①?精簡—把包袱先丟掉 刪除無用元素 隱藏/被遮擋的 <path>、未引用的 <defs> 里漸變、濾鏡。 合并路徑 同填充色或描邊的路徑 ? SVGO / SVGOMG「Mer…

MySQL長事務的隱患:深入剖析與解決方案

MySQL長事務的隱患&#xff1a;深入剖析與解決方案 一、什么是長事務&#xff1f; 在數據庫系統中&#xff0c;長事務(Long Transaction)通常指執行時間超過預期或系統設定閾值的事務。對于MySQL而言&#xff0c;雖然沒有嚴格的時間定義&#xff0c;但一般認為執行時間超過數…

華為AR1200 telnet設置

華為路由配置TELNET登 &#x1f4fa; 啟動TELNET服務 在華為路由器上啟動TELNET服務&#xff0c;執行以下命令&#xff1a; telnet server enable &#x1f511; 配置AAA認證 進入AAA認證配置&#xff0c;創建一個路由器登錄帳號admin123&#xff0c;并設置密碼為huawei123&…

【Token系列】01 | Token不是詞:GPT如何切分語言的最小單元

文章目錄 01 | Token不是詞&#xff1a;GPT如何切分語言的最小單元&#xff1f;一、什么是 Token&#xff1f;二、Token 是怎么來的&#xff1f;——BPE算法原理BPE核心步驟&#xff1a; 三、為什么不直接用詞或字符&#xff1f;四、Token切分的實際影響五、中文Token的特殊性六…

如何快速高效學習Python?

如何快速高效學習Python&#xff1f; How to Fastly and Effectively Learn Python Programming? By JacksonML 1. Python年輕嗎&#xff1f; Python自1991年誕生到現在&#xff0c;已經經歷了三十四年或者更長時間了。畢竟&#xff0c;Python之父 – 吉多范羅蘇姆先生(Gu…

NAT穿透

NAT是 Net Address Traslation的縮寫&#xff0c;即網絡地址轉換 NAT部署在網絡出口的位置。位于內網和公網之間&#xff0c;是連接內挖個主機和公網的橋梁&#xff0c;雙向流量都必須經過NAT&#xff0c;裝有NAT軟件的路由器叫NAT路由器&#xff0c;NAT路由器擁有公網Ip NAT解…

搜索引擎的高級語法

文章目錄 精確搜索&#xff1a;雙引號站內搜索&#xff1a;site通配符搜索&#xff1a;*減號縮小范圍&#xff1a;-文檔搜索&#xff1a;filetypeURL搜索&#xff1a; inurl標題搜索&#xff1a;intitle正文搜索&#xff1a;intext參考鏈接 精確搜索&#xff1a;雙引號 “ ” …

RAG vs 微調:大模型知識更新的最優解之爭

一、技術本質&#xff1a;知識注入的兩條路徑 在大模型應用落地的實踐中&#xff0c;RAG&#xff08;檢索增強生成&#xff09;與微調&#xff08;Fine-tuning&#xff09;已成為知識更新的兩大核心技術路徑。二者的本質差異在于是否對模型參數進行修改&#xff1a; 維度RAG微…

解釋器體系結構風格-筆記

解釋器&#xff08;Interpreter&#xff09;是一種軟件設計模式或體系結構風格&#xff0c;主要用于為語言&#xff08;或表達式&#xff09;定義其語法、語義&#xff0c;并通過解釋器來解析和執行語言中的表達式。解釋器體系結構風格廣泛應用于編程語言、腳本語言、規則引擎、…

瀏覽器f12可以搜索接口的入參 和返回內容

瀏覽器f12可以搜索接口的入參 和返回內容

vue3+element-push 實現input框粘貼圖片或文本,圖片上傳。

vue3element-push 實現input框粘貼圖片或文本&#xff0c;圖片上傳。 <el-inputstyle"height: 100px; width: 100%"paste.capture.prevent"pasting"v-model"textMsg"placeholder"請輸入"/>// 展示上傳的列表--可不要<divsty…

高效使用DeepSeek對“情境+ 對象 +問題“型課題進行開題!

目錄 思路"情境 對象 問題"型 課題選題的類型有哪些呢&#xff1f;這要從課題題目的構成說起。通過對歷年來國家社會科學基金立項項目進行分析&#xff0c;小編發現&#xff0c;課題選題類型非常豐富&#xff0c;但一般是圍繞限定詞、研究對象和研究問題進行不同的組…