# [maven的安裝與基本使用](https://www.cnblogs.com/kyleinjava/p/9549481.html)
一、什么是maven,有什么用?
Maven是一個項目構建和管理的工具,其主要服務于基于java平臺的項目構建、依賴管理和項目信息管理。它包含了一個項目對象模型 (Project Object Model),一組標準集合,一個項目生命周期Project Lifecycle),一個依賴管理系統(Dependency Management System),和用來運行定義在生命周期階段(phase)中插件(plugin)目標(goal)的邏輯。當你使用Maven的時候,你用一個明確定義的項目對象模型來描述你的項目,然后Maven可以應用橫切的邏輯,這些邏輯來自一組共享的(或者自定義的)插件。
二、maven安裝
1.去maven官網下載并解壓maven,并配置環境變量
](images/screenshot_1640744554028.png)

配置完成后在命令行cmd 運行mvn -version? 查詢對應的版本號
2.配置文件settting.xml的簡單配置(最好是將setting.xml文件復制一份到本地倉庫中,然后進行修改)
①配置創建項目時默認的jdk版本,在標簽中添加,這樣每次update項目的時候就會變為默認的jdk版本,這里是默認全局設置的編譯版本
~~~
<profile>
<id>jdk-1.7</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.7</jdk>
</activation>
<properties>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
<maven.compiler.compilerVersion>1.7</maven.compiler.compilerVersion>
</properties>
</profile>
~~~

②配置私有倉庫的位置(maven所有的本地jar包都會放在私有倉庫里面),其默認位置是當前用戶目錄下.m2文件夾中。通過修改下面的路徑可以修改本地倉庫的位置。

③配置中央倉庫,使用阿里云倉庫作為中央倉庫的鏡像,因為國外的倉庫訪問非常慢
~~~
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>central</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
~~~

三、eclipse使用maven
eclipse 直接創建maven project? ,項目結構如下:

四、pom文件解析
pom是項目對象模型(Project Object Model)的簡稱,是maven的核心,其定義了整個項目的基本信息,如何構建項目、項目依賴的jar包等。
簡單的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/maven-v4_0_0.xsd">
<!-- 組織名 -->
<groupId>com.kyle</groupId>
<!-- 定義了當前Maven項目在組中唯一的ID -->
<artifactId>demo</artifactId>
<!-- 版本號 -->
<version>0.0.1-SNAPSHOT</version>
<!-- 指定了POM模型的版本,對于Maven2及Maven3來說,它只能是4.0.0 -->
<modelVersion>4.0.0</modelVersion>
<!-- 項目打包方式有pom、jar、war等 -->
<packaging>war</packaging>
<!-- 項目名,maven產生文檔用 -->
<name>demo</name>
<url>http://maven.apache.org</url>
<!-- 繼承的父項目 -->
<!-- <parent>
<groupId></groupId>
<artifactId></artifactId>
<version></version>
</parent> -->
<!--項目引入依賴包-->
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<finalName>demo</finalName>
<plugins>
<!-- 引入插件,設置java編譯版本 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
~~~
詳細的pom解析:
[https://www.cnblogs.com/oskyhg/p/6445589.html](https://www.cnblogs.com/oskyhg/p/6445589.html)
[https://blog.csdn.net/sunzhenhua0608/article/details/32938533](https://blog.csdn.net/sunzhenhua0608/article/details/32938533)
[https://blog.csdn.net/wdx1121/article/details/79664385](https://blog.csdn.net/wdx1121/article/details/79664385)
?五、maven的生命周期和相關命令
1.一個項目的構建過成通常包括清理、編譯、測試、打包、集成測試、驗證、部署等。Maven從中抽取了一套完善的、易擴展的生命周期。Maven的生命周期是抽象的,其中的具體任務都交由插件來完成。Maven為大多數構建任務編寫并綁定了默認的插件。
2.Maven定義了三套生命周期:clean、default、site,每個生命周期都包含了一些階段(phase)。三套生命周期相互獨立,但各個生命周期中的phase卻是有順序的,且后面的phase依賴于前面的phase。執行某個phase時,其前面的phase會依順序執行,但不會觸發另外兩套生命周期中的任何phase。

? ? 

3.maven常見的命令
~~~
validate:驗證項目是正確的,所有必要的信息都是可用的
compile:編譯項目的源代碼
test:使用適當的單元測試框架測試編譯后的源代碼。這些測試不應要求將代碼打包或部署
package:使用已編譯的代碼,并將其打包成可分布格式,例如JAR。
verify:對集成測試的結果進行任何檢查,以確保滿足質量標準
install:將包安裝到本地存儲庫中,以便在本地其他項目中使用該包
deploy:在構建環境中完成,將最終的包復制到遠程存儲庫中,以便與其他開發人員和項目共享。
~~~
這些生命周期階段(加上這里沒有顯示的其他生命周期階段)是按順序執行的,以完成默認的生命周期。鑒于上面的生命周期階段,這意味著當使用默認的生命周期時,Maven將會優先執行檢查項目(validate),然后將會嘗試編譯源代碼(compile),運行集成測試方案(test),驗證了集成測試(verify),驗證包安裝到本地存儲庫(install),然后將安裝包部署到遠程存儲庫(deploy)。
