Maven(意第緒語「知識積累」)是 Apache 旗下**項目構建與依賴管理工具**。它解決了 Ant 時代的痛點:
核心理念:**約定優於配置**,遵循標準目錄結構,零配置即可構建。
D:\dev\apache-maven-3.9.6)MAVEN_HOME = D:\dev\apache-maven-3.9.6Path 追加 %MAVEN_HOME%\binmvn -version
Apache Maven 3.9.6
Maven home: D:\dev\apache-maven-3.9.6
Java version: 17.0.9, vendor: Oracle Corporation
Default locale: zh_CN, platform encoding: UTF-8
OS name: "windows 11", version: "10.0", arch: "amd64", family: "windows"
位置:${MAVEN_HOME}/conf/settings.xml(全局)或 ~/.m2/settings.xml(用戶級,推薦)
<settings>
<!-- 本地倉庫路徑 -->
<localRepository>D:/maven-repo</localRepository>
<!-- 鏡像:阿里云中央倉庫加速 -->
<mirrors>
<mirror>
<id>aliyun</id>
<mirrorOf>central</mirrorOf>
<name>Aliyun Maven</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
</mirrors>
<!-- JDK 編譯版本全局默認 -->
<profiles>
<profile>
<id>jdk-17</id>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
</profile>
</profiles>
<activeProfiles><activeProfile>jdk-17</activeProfile></activeProfiles>
</settings>
mvn -B archetype:generate \
-DarchetypeGroupId=org.apache.maven.archetypes \
-DarchetypeArtifactId=maven-archetype-quickstart \
-DgroupId=com.myapp \
-DartifactId=myapp \
-Dversion=1.0-SNAPSHOT
-B 批次模式(非交互),生成標準目錄:
myapp
├── pom.xml
└── src
├── main
│ └── java
│ └── com
│ └── myapp
│ └── App.java
└── test
└── java
└── com
└── myapp
└── AppTest.java
<project xmlns="https://maven.apache.org/POM/4.0.0" ...>
<modelVersion>4.0.0</modelVersion>
<!-- 坐標 GAV:全局唯一標識 -->
<groupId>com.myapp</groupId> <!-- 組織/公司域名反寫 -->
<artifactId>myapp</artifactId> <!-- 項目/模塊名 -->
<version>1.0-SNAPSHOT</version> <!-- 版本:SNAPSHOT=開發中,RELEASE=發布 -->
<packaging>jar</packaging> <!-- 打包類型:jar/war/pom/ear -->
<name>myapp</name> <!-- 顯示名 -->
<url>https://maven.apache.org</url> <!-- 項目站點 -->
<properties> <!-- 自定義屬性,${key} 引用 -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
</properties>
<dependencies> <!-- 依賴聲明 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope> <!-- 作用域:compile/test/provided/runtime/system/import -->
</dependency>
</dependencies>
<build>
<plugins> <!-- 插件配置 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.11.0</version>
<configuration>
<source>17</source>
<target>17</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
</project>
三套內置生命周期:
| 生命周期 | 階段 | 核心命令 | 說明 |
|---|---|---|---|
| default (構建部署) | validate | 驗證項目正確性 | |
| compile | mvn compile | 編譯主代碼 → target/classes | |
| test | mvn test | 編譯+運行測試 → target/test-classes、Surefire 報表 | |
| package | mvn package | 打包 → target/${artifactId}-${version}.jar | |
| verify | mvn verify | 集成測試、質量檢查 | |
| install | mvn install | 安裝到本地倉庫 ~/.m2/repository,供其他項目依賴 | |
| deploy | mvn deploy | 發布到遠程私服 | |
| clean | pre-clean | ||
| clean | mvn clean | 刪除 target 目錄 | |
| post-clean | |||
| site | pre-site | ||
| site | mvn site | 生成項目站點文檔 → target/site | |
| post-site | |||
| site-deploy | mvn site-deploy | 部署站點 |
mvn clean install -DskipTests:清理、編譯、測試(跳過)、打包、安裝本地倉庫(最常用)mvn clean package -Pprod:啟用 prod Profile 打包mvn dependency:tree:查看依賴樹,排查衝突mvn dependency:analyze:檢查未使用/未聲明依賴mvn help:effective-pom:查看合併後的有效 POM| Scope | 編譯類路徑 | 測試類路徑 | 運行類路徑 | 打包 | 典型場景 |
|---|---|---|---|---|---|
| compile (默認) | ✓ | ✓ | ✓ | ✓ | 項目核心依賴 |
| test | ✗ | ✓ | ✗ | ✗ | JUnit、Mockito |
| provided | ✓ | ✓ | ✗ | ✗ | Servlet API、JSP API(容器已提供) |
| runtime | ✗ | ✓ | ✓ | ✓ | JDBC 驅動 |
| system | ✓ | ✓ | ✗ | ✗ | 本地 JAR(需 systemPath,不推薦) |
| import | - | - | - | - | BOM 依賴管理(dependencyManagement) |
File → Settings → Build Tools → Maven:
~/.m2/settings.xmlFile → Open → 選擇 pom.xml → Open as Projectinstall 一鍵構建Settings → Build Tools → Maven → Importing → Import Maven projects automatically 勾選# 父 POM (packaging=pom)
<modules>
<module>myapp-common</module>
<module>myapp-dao</module>
<module>myapp-service</module>
<module>myapp-web</module>
</modules>
<dependencyManagement>
<dependencies>
<dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.3.30</version></dependency>
...
</dependencies>
</dependencyManagement>
dependencyManagement),子模塊引用時**省略 version**mvn clean install 會按依賴順序構建所有模塊Maven 以 **POM 為核心、約定目錄結構、聲明式依賴、標準生命周期**,建立了 Java 項目構建的工業標準。掌握 **GAV 坐標、Scope 作用域、生命周期階段、settings.xml 鏡像配置、多模塊聚合**,即可駕馭 90% 的構建場景。進階方向:Profile 多環境、插件開發、BOM 管理、簽名發布、Maven Central 發佈。