Maven核心概念全講解

Maven 是什么?

  • Maven的意思是“專家,知識的積累著”,來自Yiddish語言,meyvn單詞,意為“知識的積累者”
  • Maven是一個(gè)項(xiàng)目管理工具,基于項(xiàng)目對象模型(POM)管理項(xiàng)目,就是用XML描述一個(gè)項(xiàng)目的信息(主要是項(xiàng)目依賴jar,插件,倉庫等等)
  • 同類型工具還有Ant,Gradle,目前Maven用的更普遍一些,同等工具還有nodejs下的npm等等
  • Maven最大的好處是,基于“約定大于配置”思想,在全世界做好了Java項(xiàng)目開發(fā)的規(guī)范,使得開發(fā)人員可以在多個(gè)項(xiàng)目間平滑遷移。
  • Apache的開源工具,開源免費(fèi)

che/maven)

下載安裝

下載地址 https://maven.apache.org/download.cgi

  1. 下載壓縮包解壓可用,非常簡單
  2. 需要預(yù)裝JDK環(huán)境,并配置JAVA_HOME環(huán)境變量
  3. 將Maven的解壓目錄加入系統(tǒng)環(huán)境變量PATH


運(yùn)行

運(yùn)行Maven的語法如下:
mvn [選項(xiàng)] [<目標(biāo)>] [<階段>]
獲取幫助命令 mvn -h

約定配置

一個(gè)Maven項(xiàng)目目錄如下,約定如此:

-- 項(xiàng)目目錄
----src 資源目錄,存放項(xiàng)目代碼
------main 代碼主目錄,存放項(xiàng)目主體代碼
--------java 存放java代碼
--------resource 存放資源代碼
------test  測試目錄,存放測試相關(guān)代碼
--------java 存放java代碼
--------resource 存放資源代碼
-----target 打包輸出目錄,存放項(xiàng)目打包后輸出的jar或war包
-------classes 編譯輸出目錄
-------test-classes 測試代碼編譯輸出目錄
--pom.xml 項(xiàng)目對象模型描述文件,是一個(gè)xml文件

一個(gè)項(xiàng)目的開發(fā)流程約定如下:
Maven提供一個(gè)中心倉庫,大家把自己寫好的代碼打包成jar發(fā)布到中心倉庫,用一段pom片段描述項(xiàng)目信息,別人使用該項(xiàng)目的時(shí)候,引入該pom片段,Maven自動把相關(guān)jar依賴下載并配置到項(xiàng)目開發(fā)環(huán)境中,如果多個(gè)jar之間有相互依賴或繼承等關(guān)系,Maven會自動處理好。

Maven倉庫

倉庫分為:

  • 中央(central)
  • 遠(yuǎn)程(remote)
  • 本地(local)
    中央倉庫是中心節(jié)點(diǎn),有Maven社區(qū)提供,但是各國或各公司網(wǎng)絡(luò)訪問中心倉庫速度可能很慢,所以可以自己搭建遠(yuǎn)程倉庫,相當(dāng)于中央倉庫的一個(gè)緩存點(diǎn),加快網(wǎng)絡(luò)訪問速度,還有一個(gè)問題,每次都下載jar是非常浪費(fèi)帶寬和時(shí)間的,所以在開發(fā)者本機(jī)也有一個(gè)本地倉庫,用來緩存jar。

倉庫本質(zhì)就是一個(gè)文件夾,用來存放依賴jar等文件。
本地倉庫目錄默認(rèn)存放在用戶目錄下.m2文件下

  • .m2/respository/ 為倉庫存放目錄
  • .m2/settings.xml 為Maven的設(shè)置文件

本地倉庫路徑修改需要修改setting.xml:

      <localRepository>C:/MyLocalRepository</localRepository>

遠(yuǎn)程倉庫修改需要修改項(xiàng)目中的pom.xml文件

 <repositories>
      <repository>
         <id>companyname.lib1</id>
         <url>http://download.companyname.org/maven2/lib1</url>
      </repository>
      <repository>
         <id>companyname.lib2</id>
         <url>http://download.companyname.org/maven2/lib2</url>
      </repository>
   </repositories>

中央倉庫地址: https://mvnrepository.com/

可以web打開搜索依賴。

Maven依賴的搜索順序:

  1. 本地倉庫搜索,搜索到即使用,搜索不到就去中央倉庫搜索
  2. 中央倉庫搜索到則下載緩存到本地倉庫,搜索不到則查找配置的遠(yuǎn)程倉庫
  3. 如果沒配置遠(yuǎn)程倉庫,則報(bào)錯(cuò),配置了遠(yuǎn)程倉庫,則去遠(yuǎn)程倉庫查找
  4. 遠(yuǎn)程倉庫搜索到則下載到本地緩存,搜索不到則報(bào)錯(cuò)

POM 坐標(biāo)

    <!-- 模型版本 -->
    <modelVersion>4.0.0</modelVersion>
    <!-- 公司或者組織的唯一標(biāo)志,并且配置時(shí)生成的路徑也是由此生成, 如com.companyname.project-group,maven會將該項(xiàng)目打成的jar包放本地路徑:/com/companyname/project-group -->
    <groupId>com.companyname.project-group</groupId>
    <!-- 項(xiàng)目的唯一ID,一個(gè)groupId下面可能多個(gè)項(xiàng)目,就是靠artifactId來區(qū)分的 -->
    <artifactId>project</artifactId>
    <!-- 版本號 -->
    <version>1.0</version>
</project>

Maven生命周期

  • 驗(yàn)證 validate 驗(yàn)證項(xiàng)目 驗(yàn)證項(xiàng)目是否正確且所有必須信息是可用的
  • 編譯 compile 執(zhí)行編譯 源代碼編譯在此階段完成
  • 測試 Test 測試 使用適當(dāng)?shù)膯卧獪y試框架(例如JUnit)運(yùn)行測試。
  • 包裝 package 打包 創(chuàng)建JAR/WAR包如在 pom.xml 中定義提及的包
  • 檢查 verify 檢查 對集成測試的結(jié)果進(jìn)行檢查,以保證質(zhì)量達(dá)標(biāo)
  • 安裝 install 安裝 安裝打包的項(xiàng)目到本地倉庫,以供其他項(xiàng)目使用
  • 部署 deploy 部署 拷貝最終的工程包到遠(yuǎn)程倉庫中,以共享給其他開發(fā)人員和工程

Maven 有以下三個(gè)標(biāo)準(zhǔn)的生命周期:

  • clean:項(xiàng)目清理的處理
  • default(或 build):項(xiàng)目部署的處理
  • site:項(xiàng)目站點(diǎn)文檔創(chuàng)建的處理

Clean 生命周期

當(dāng)我們執(zhí)行 mvn post-clean 命令時(shí),Maven 調(diào)用 clean 生命周期,它包含以下階段:

  • pre-clean:執(zhí)行一些需要在clean之前完成的工作
  • clean:移除所有上一次構(gòu)建生成的文件
  • post-clean:執(zhí)行一些需要在clean之后立刻完成的工作

Default (Build) 生命周期

這是 Maven 的主要生命周期,被用于構(gòu)建應(yīng)用,包括下面的 23 個(gè)階段:

  • validate(校驗(yàn)) 校驗(yàn)項(xiàng)目是否正確并且所有必要的信息可以完成項(xiàng)目的構(gòu)建過程。
  • initialize(初始化) 初始化構(gòu)建狀態(tài),比如設(shè)置屬性值。
  • generate-sources(生成源代碼) 生成包含在編譯階段中的任何源代碼。
  • process-sources(處理源代碼) 處理源代碼,比如說,過濾任意值。
  • generate-resources(生成資源文件) 生成將會包含在項(xiàng)目包中的資源文件。
  • process-resources (處理資源文件) 復(fù)制和處理資源到目標(biāo)目錄,為打包階段最好準(zhǔn)備。
  • compile(編譯) 編譯項(xiàng)目的源代碼。
  • process-classes(處理類文件) 處理編譯生成的文件,比如說對Java class文件做字節(jié)碼改善優(yōu)化。
  • generate-test-sources(生成測試源代碼) 生成包含在編譯階段中的任何測試源代碼。
  • process-test-sources(處理測試源代碼) 處理測試源代碼,比如說,過濾任意值。
  • generate-test-resources(生成測試資源文件) 為測試創(chuàng)建資源文件。
  • process-test-resources(處理測試資源文件) 復(fù)制和處理測試資源到目標(biāo)目錄。
  • test-compile(編譯測試源碼) 編譯測試源代碼到測試目標(biāo)目錄.
  • process-test-classes(處理測試類文件) 處理測試源碼編譯生成的文件。
  • test(測試) 使用合適的單元測試框架運(yùn)行測試(Juint是其中之一)。
  • prepare-package(準(zhǔn)備打包) 在實(shí)際打包之前,執(zhí)行任何的必要的操作為打包做準(zhǔn)備。
  • package(打包) 將編譯后的代碼打包成可分發(fā)格式的文件,比如JAR、WAR或者EAR文件。
  • pre-integration-test(集成測試前) 在執(zhí)行集成測試前進(jìn)行必要的動作。比如說,搭建需要的環(huán)境。
  • integration-test(集成測試) 處理和部署項(xiàng)目到可以運(yùn)行集成測試環(huán)境中。
  • post-integration-test(集成測試后) 在執(zhí)行集成測試完成后進(jìn)行必要的動作。比如說,清理集成測試環(huán)境。
  • verify (驗(yàn)證) 運(yùn)行任意的檢查來驗(yàn)證項(xiàng)目包有效且達(dá)到質(zhì)量標(biāo)準(zhǔn)。
  • install(安裝) 安裝項(xiàng)目包到本地倉庫,這樣項(xiàng)目包可以用作其他本地項(xiàng)目的依賴。
  • deploy(部署) 將最終的項(xiàng)目包復(fù)制到遠(yuǎn)程倉庫中與其他開發(fā)者和項(xiàng)目共享。

說明:
有一些與 Maven 生命周期相關(guān)的重要概念需要說明:
當(dāng)一個(gè)階段通過 Maven 命令調(diào)用時(shí),例如 mvn compile,只有該階段之前以及包括該階段在內(nèi)的所有階段會被執(zhí)行。
不同的 maven 目標(biāo)將根據(jù)打包的類型(JAR / WAR / EAR),被綁定到不同的 Maven 生命周期階段。

Site 生命周期

Maven Site 插件一般用來創(chuàng)建新的報(bào)告文檔、部署站點(diǎn)等。

  • pre-site:執(zhí)行一些需要在生成站點(diǎn)文檔之前完成的工作
  • site:生成項(xiàng)目的站點(diǎn)文檔
  • post-site: 執(zhí)行一些需要在生成站點(diǎn)文檔之后完成的工作,并且為部署做準(zhǔn)備
  • site-deploy:將生成的站點(diǎn)文檔部署到特定的服務(wù)器上

Maven的所有生命周期都是由插件完成的,你也可以自定義自己的插件,用來實(shí)現(xiàn)特定的功能。

常用的命令

# 清理
mvn clean 
# 編譯
>mvn compile
# 安裝
mvn install
# 先清理再部署
mvn clean deploy
# 生成站點(diǎn)文檔
mvn site

IDEA中使用Maven

idea自帶了maven,使用非常方便,都是圖形界面化操作,在項(xiàng)目的右側(cè)導(dǎo)航欄,對應(yīng)的生命周期之間雙擊鼠標(biāo)即可


具體的設(shè)置如下圖:


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容