Maven 相關(guān)概念總結(jié)
構(gòu)建原理
Maven 構(gòu)建項目的規(guī)則是約定大于配置
,約定指 Maven 提倡項目應(yīng)遵循標(biāo)準(zhǔn)的目錄結(jié)構(gòu)、命名規(guī)范等,以便于 Maven 幫助用戶自動化地完成項目的編譯、測試、打包等一系列工作。
Maven 對項目的生命周期進(jìn)行了規(guī)范,保證不同用戶按照統(tǒng)一的規(guī)范實現(xiàn)項目的自動化構(gòu)建。
生命周期
Maven 項目的生命周期包含三部分:Clean、Build、Site
Clean 生命周期
Clean 生命周期用于在項目正式構(gòu)建前進(jìn)行一些清理工作,包含以下階段:
- pre-clean:執(zhí)行 clean 前需要完成的工作
- clean:清理上次構(gòu)建生成的文件
- post-clean:執(zhí)行 clean 后需要完成的工作
Build 生命周期
Build 生命周期用于構(gòu)建項目,是 Maven 項目的主要生命周期,共包含23個階段,主要的有:
- validate:驗證項目正確且必要的信息可用
- compile:編譯代碼
- test:執(zhí)行單元測試
- package:打包編譯后的代碼
- verify:運行集成測試以保證項目質(zhì)量達(dá)標(biāo)
- install:將打包后的項目安裝至本地倉庫以供其他項目使用
- deploy:在build環(huán)境上部署項目,并將打包后的項目發(fā)送到遠(yuǎn)程倉庫
Site 生命周期
Site 生命周期用于生成項目的報告文檔、站點,包含以下階段:
- pre-site:執(zhí)行生成站點文檔前的工作
- site:生成站點文檔
- post-site:執(zhí)行生成站點文檔后的工作,并未部署做準(zhǔn)備
- site-deploy:將生成的站點文檔部署到服務(wù)器上
配置文件
Maven 項目的配置文件為項目根目錄下的pom.xml
文件,該文件中主要包含以下幾部分:
-
groupId
和artifactId
標(biāo)簽分別表示組織/公司的標(biāo)識和項目的標(biāo)識,這兩個 id 共同定義了這個項目在 Maven 倉庫中的唯一坐標(biāo) -
version
標(biāo)簽表示項目的版本信息 -
build
標(biāo)簽用于定義項目的構(gòu)建過程 -
dependency
標(biāo)簽用于定義項目依賴的外部庫 -
repositories
標(biāo)簽用于定義項目的遠(yuǎn)程倉庫
例如:
- 基本配置:
<!-- 組織標(biāo)識 -->
<groupId>org.apache.maven.extensions</groupId>
<!-- 項目標(biāo)識 -->
<artifactId>beer-maven-lifecycle</artifactId>
<!-- 項目版本號 -->
<version>1.0-SNAPSHOT</version>
<!-- 項目的依賴 -->
<dependencies>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-core</artifactId>
<version>3.6.1</version>
</dependency>
<dependency>
<groupId>org.codehaus.plexus</groupId>
<artifactId>plexus-component-annotations</artifactId>
<version>1.7.1</version>
</dependency>
</dependencies>
<!-- 項目的遠(yuǎn)程倉庫 -->
<repositories>
<repository>
<id>companyname.lib1</id>
<url>http://download.companyname.org/maven2/lib1</url>
</repository>
</repositories>
- 構(gòu)建配置:
<build>
<!-- 構(gòu)建出的文件名,默認(rèn)值是${artifactId}-${version}。 -->
<finalName>myPorjectName</finalName>
<!-- 構(gòu)建產(chǎn)生的所有文件存放的目錄,默認(rèn)為項目根目錄下的target -->
<directory>${basedir}/target</directory>
<!-- 項目相關(guān)的所有資源路徑列表 -->
<resources>
<resource>
<!-- 描述了資源的目標(biāo)路徑 -->
<targetPath>resources</targetPath>
<!-- 描述存放資源的目錄,該路徑相對POM路徑 -->
<directory>src/main/resources</directory>
<!-- 包含的模式列表 -->
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<!-- 排除的模式列表 如果<include>與<exclude>劃定的范圍存在沖突,以<exclude>為準(zhǔn) -->
<excludes>
<exclude>jdbc.properties</exclude>
</excludes>
</resource>
</resources>
<!-- 單元測試相關(guān)的所有資源路徑,配制方法與resources類似 -->
<testResources>
<testResource>
</testResource>
</testResources>
<!-- 項目源碼目錄,相對于pom.xml路徑 -->
<sourceDirectory>${basedir}\src\main\java</sourceDirectory>
<!-- 項目單元測試使用的源碼目錄相對于pom.xml路徑 -->
<testSourceDirectory>${basedir}\src\test\java</testSourceDirectory>
<!-- 項目的一系列構(gòu)建擴(kuò)展 -->
<extensions>
<extension>
<groupId>org.apache.maven.wagon</groupId>
<artifactId>wagon-ssh</artifactId>
<version>2.8</version>
</extension>
</extensions>
<!-- 使用的插件列表 -->
<plugins>
<plugin>
<groupId></groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.5.5</version>
<!-- 在構(gòu)建生命周期中執(zhí)行一組目標(biāo)的配置 -->
<executions>
<execution>
<!-- 執(zhí)行目標(biāo)的標(biāo)識符 -->
<id>assembly</id>
<!-- 綁定了目標(biāo)的構(gòu)建生命周期階段 -->
<phase>package</phase>
<!-- 配置的執(zhí)行目標(biāo) -->
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
<!-- 項目引入插件所需要的額外依賴 -->
<dependencies>
<dependency>...</dependency>
</dependencies>
</plugin>
</plugins>
</build>
倉庫
Maven 倉庫用于存儲項目的依賴文件,分為本地倉庫、遠(yuǎn)程倉庫和中央倉庫
-
本地倉庫
本地倉庫位于開發(fā)人員自己的計算機(jī)上,保存著項目的所有依賴。在運行 Maven 構(gòu)建時,Maven 會自動將所有依賴下載到本地倉庫以供使用。
Maven 本地倉庫默認(rèn)被創(chuàng)建在
%USER_HOME%
目錄下??梢栽?%M2_HOME%\conf
目錄中的settings.xml
中修改 -
中央倉庫
中央倉庫由 Maven 社區(qū)提供,包含大量的常用庫,通過網(wǎng)絡(luò)進(jìn)行訪問,不需要進(jìn)行配置。
-
遠(yuǎn)程倉庫
遠(yuǎn)程倉庫由項目組織定義,需要通過項目的
pom xml
文件進(jìn)行配置,