首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Maven 入門實戰(一):核心概念、環境搭建、項目構建、依賴管理、本地倉庫遷移全流程

     編輯:Java 綜合教學

前言:Maven 是什麼?

Maven 是 Apache 基金會頂級項目,基於項目對象模型 (POM) 的軟件項目管理與構建工具。它統一了構建流程、依賴管理、項目資訊、插件生態,是 Java 生態事實標準構建工具 (Gradle 為強力挑戰者)。本文面向零基礎,覆蓋安裝配置、核心概念、HelloWorld 構建、測試、打包、依賴管理、倉庫遷移全流程。

一、核心概念速記

概念含義類比
POM (Project Object Model)項目坐標、依賴、構建配置的 XML 描述 (pom.xml)項目身份證 + 說明書
坐標 (GAV)groupId:artifactId:version 唯一標識構件群組:產品:版本
依賴項目運行/構建所需的第三方 JAR原材料清單
倉庫本地 (~/.m2/repository) / 遠程 (Central, 阿里云) 存儲構件原材料倉庫
生命周期/階段clean → validate → compile → test → package → verify → install → deploy標準化生產流水線
插件/目標實際執行構建任務的單元 (如 maven-compiler-plugin:compile)流水線上的機器人
繼承/聚合父 POM 統一版本/配置;多模塊項目聚合構建集團管控 / 總裝車間

二、環境搭建 (Windows 示例)

2.1 前置條件:JDK 8+ 已安裝並配置 JAVA_HOME、PATH


JAVA_HOME=D:\Java\jdk1.8.0_202
PATH=%JAVA_HOME%\bin;%PATH%

2.2 下載與解壓

  1. 官網:https://maven.apache.org/download.cgi
  2. 下載 apache-maven-3.9.6-bin.zip (最新穩定版)
  3. 解壓到無中文、無空格路徑:D:\maven\apache-maven-3.9.6

2.3 環境變量配置


M2_HOME=D:\maven\apache-maven-3.9.6
PATH=%M2_HOME%\bin;%PATH%

2.4 驗證安裝


> mvn -version
Apache Maven 3.9.6 (....)
Maven home: D:\maven\apache-maven-3.9.6
Java version: 1.8.0_202, vendor: Oracle Corporation
Default locale: zh_CN, platform encoding: GBK
OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"

三、HelloWorld 項目手工構建 (理解標準目錄約定)

3.1 目錄結構 (Maven Standard Directory Layout)


HelloWorld
├── pom.xml
└── src
    ├── main
    │   └── java
    │       └── com
    │           └── example
    │               └── helloworld
    │                   └── HelloWorld.java
    └── test
        └── java
            └── com
                └── example
                    └── helloworld
                        └── HelloWorldTest.java

3.2 pom.xml (最小化)


<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="https://maven.apache.org/POM/4.0.0"
         xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="https://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.example</groupId>
    <artifactId>HelloWorld</artifactId>
    <version>1.0-SNAPSHOT</version>
    <properties>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <dependencies>
        <!-- JUnit 5 -->
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>5.10.2</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <version>5.10.2</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>

3.3 主代碼


package com.example.helloworld;
public class HelloWorld {
    public String sayHello() { return "Hello Maven!"; }
    public static void main(String[] args) { System.out.println(new HelloWorld().sayHello()); }
}

3.4 測試代碼


package com.example.helloworld;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
class HelloWorldTest {
    @Test void testSayHello() { assertEquals("Hello Maven!", new HelloWorld().sayHello()); }
}

四、核心命令實戰

命令作用輸出產物
mvn clean刪除 target 目錄乾淨工作區
mvn compile編譯主代碼target/classes
mvn test-compile編譯測試代碼target/test-classes
mvn test運行測試 (Surefire Plugin)測試報告 target/surefire-reports
mvn package打包 (JAR/WAR)target/HelloWorld-1.0-SNAPSHOT.jar
mvn install安裝到本地倉庫~/.m2/repository/com/example/HelloWorld/1.0-SNAPSHOT/
mvn deploy部署到遠程倉庫 (需配置 distributionManagement)遠程倉庫
mvn site生成項目站點文檔target/site
mvn dependency:tree查看依賴樹控制台輸出
mvn help:effective-pom查看合併後的有效 POM控制台輸出

4.1 實戰演示


> cd HelloWorld
> mvn clean compile
[INFO] Building jar: .../target/HelloWorld-1.0-SNAPSHOT.jar
> mvn test
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
> mvn package
[INFO] Building jar: .../target/HelloWorld-1.0-SNAPSHOT.jar
> java -cp target/HelloWorld-1.0-SNAPSHOT.jar com.example.helloworld.HelloWorld
Hello Maven!

五、依賴管理:從中央倉庫引入 JAR

5.1 搜索依賴

網站:mvnrepository.com 或 search.maven.org

搜索 junit → 選擇 org.junit.jupiter:junit-jupiter → 複製依賴 XML 到 <dependencies>。

5.2 依賴範圍 (Scope) 核心

Scope編譯類路徑測試類路徑運行類路徑打包包含典型場景
compile (默認)✅✅✅✅業務核心依賴 (Spring, MyBatis, Jackson)
test❌✅❌❌測試框架 (JUnit, Mockito, AssertJ)
provided✅✅❌❌容器提供 (Servlet API, JSP API, JDBC 驅動)
runtime❌✅✅✅運行時才需 (JDBC 驅動, 日誌實現)
system✅✅❌❌本地 JAR (不推薦,破壞可移植性)
import僅在 dependencyManagement 中導入 BOMSpring Boot BOM, Spring Cloud BOM

5.3 依賴傳遞與衝突解決

  • 傳遞性:A → B → C,A 自動獲得 C (compile 范圍傳遞)
  • 調解原則:最近優先、第一聲明優先
  • 排除依賴:<exclusion><groupId>...</groupId><artifactId>...</artifactId></exclusion>
  • 版本鎖定:<dependencyManagement> 統一版本,子模塊/項目引用時可省略版本號

六、本地倉庫遷移:避免 C 盤爆滿

6.1 默認位置

${user.home}/.m2/repository (Windows: C:\Users\用戶名\.m2\repository)

6.2 修改 settings.xml

文件位置:${M2_HOME}/conf/settings.xml (全局) 或 ${user.home}/.m2/settings.xml (用戶級,推薦)


<settings>
    <localRepository>D:/maven/repository</localRepository>
    <!-- 鏡像加速 (阿里云) -->
    <mirrors>
        <mirror>
            <id>aliyun</id>
            <name>Aliyun Maven</name>
            <url>https://maven.aliyun.com/repository/public</url>
            <mirrorOf>central</mirrorOf>
        </mirror>
    </mirrors>
</settings>

6.3 生效驗證


> mvn help:effective-settings | grep localRepository
D:\maven\repository

後續構建將下載 JAR 到 D:/maven/repository。

七、IDEA 整合 Maven (最佳實踐)

  1. File → Settings → Build Tools → Maven
  2. Maven home directory:指向 D:\maven\apache-maven-3.9.6 (使用系統安裝版,而非 IDEA 內置)
  3. User settings file:指向 D:\maven\apache-maven-3.9.6\conf\settings.xml 或用戶級 settings.xml
  4. Local repository:自動讀取 settings.xml 配置
  5. 勾選 Import Maven projects automatically

八、總結:Maven 核心知識圖譜


Maven 核心
├── POM (坐標、依賴、構建、屬性、配置文件)
├── 生命周期 (clean, default, site) + 階段
├── 插件/目標 (Compiler, Surefire, JAR, WAR, Source, Javadoc, GPG...)
├── 倉庫 (本地、遠程、鏡像、快照/發布)
├── 依賴管理 (坐標、範圍、傳遞、調解、排除、BOM)
├── 繼承/聚合 (父 POM、模塊、版本鎖定)
├── 環境隔離 (Profile、Settings、Properties)
└── 最佳實踐
    ├── 標準目錄結構
    ├── 版本號語義化 (MAJOR.MINOR.PATCH[-SNAPSHOT])
    ├── 依賴範圍精準控制
    ├── 統一版本管理 (dependencyManagement + BOM)
    ├── 私服搭建
    └── CI/CD 集成

掌握 Maven,不僅是會用幾條命令,而是理解標準化構建背後的工程哲學:約定優於配置、依賴可傳遞、構建可復用、過程可追溯。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved