端碗吹水編程
Maven聚合模塊: 由於Maven是提倡模塊化編程的,因此會以多個工程分爲多個模塊。若是全部的功能、模塊都寫在一個工程裏的話,不方便於擴展、升級、修改、查看和團隊開發,並且也不方便於模塊的複用。 Maven則是提倡將一個項目拆分紅多個工程,每一個工程完成一個模塊或功能,這些工程就像零件通常,分別去進行開發,分爲多個工程也方便於維護和分工合做。 每一個工程模塊能夠經過pom配置文件實現串聯,例如配置好pom文件以後,A工程能夠直接對B工程的代碼進行調用,C工程能夠對A和B工程的代碼進行調用。 由於工程拆分紅了多個模塊,即使能串聯也沒法進行一個統一的管理,若是【學Java,到凱哥學堂kaige123.com】某個模塊缺乏編譯環境或者缺乏某些依賴包就會出現總體的錯誤,因此咱們須要一個單獨的工程來管理這些模塊,從而實現到統一管理,將這些散開的工程統一管理起來後就能夠統一進行編譯、測試或運行,這就是聚合模塊。 按照Maven的聚合方式是把所有的工程都放在一個目錄下,而後統一經過一個pom文件去管理,可是在Eclipse或者其餘開發工具裏要作到這一點比較麻煩,須要手動去操做。可是咱們能夠建立一個單獨的pom工程去實現這個聚合管理:服務器
建立完成,這個工程裏就只有一個src的文件夾和pom文件:maven
而後編輯pom配置文件,進行模塊映射:模塊化
由於只有到上一個目錄才能看到其餘的三個工程工具
而後就能夠統一進行編譯、測試或運行了:post
Maven繼承: Maven的繼承就是將父節點配置的依賴包繼承下來,例如父節點配置了JUnit依賴包,這樣的話只要繼承它的工程都會自動下載此依賴包,就不須要本身再進行配置了。 這個父節點是一個pom工程,因此咱們能夠直接用管理工程作爲父節點。 示例:開發工具
由於以上的作法會令全部繼承此父節點的工程都下載此父節點配置的依賴包,可是若是某些工程並不是必須須要此依賴包的話,就將此依賴包聲明爲無需自動下載依賴:測試
而後繼承此父節點的工程就不會自動下載了:ui
若是有工程要配置此父節點配置的無需自動下載的依賴包,就寫一個依賴便可,只不過不須要寫此依賴包的版本號:插件
Maven的生命週期: Maven強大的一個重要的緣由是它有一個十分完善的生命週期模型(lifecycle),這個生命週期能夠從兩方面來理解,第一,顧名思義,運行Maven的每一個步驟都由它來定義的,這種預約義的默認行爲使得咱們使用Maven變得簡單,相比而言,Ant的每一個步驟都要你手工去定義。第二,這個模型是一種標準,在不一樣的項目中,使用Maven的接口是同樣的,這樣就不用去仔細理解每一個項目的構建了,通常狀況下,mvn clean install 這樣的命令是通用的。我想,必定是吸取了許多項目的經驗,Maven才能定義出如此完善的模型。 Maven有三套相互獨立的生命週期,請注意這裏說的是「三套」,並且「相互獨立」,初學者容易將Maven的生命週期當作一個總體,其實否則。這三套生命週期分別是: Clean Lifecycle 在進行真正的構建以前進行一些清理工做。 Default Lifecycle 構建的核心部分,編譯,測試,打包,部署等等。 Site Lifecycle 生成項目報告,站點,發佈站點。 我再次強調一下它們是相互獨立的,你能夠僅僅調用clean來清理工做目錄,僅僅調用site來生成站點。固然你也能夠直接運行 mvn clean install site 運行全部這三套生命週期。 每套生命週期都由一組階段(Phase)組成,咱們平時在命令行輸入的命令總會對應於一個特定的階段。好比,運行mvn clean ,這個的clean是Clean生命週期的一個階段。有點繞?要知道有Clean生命週期,也有clean階段。Clean生命週期一共包含了三個階段: pre-clean 執行一些須要在clean以前完成的工做 clean 移除全部上一次構建生成的文件 post-clean 執行一些須要在clean以後馬上完成的工做 分支圖:
mvn clean 中的clean就是上面的clean,在一個生命週期中,運行某個階段的時候,它以前的全部階段都會被運行,也就是說,mvn clean 等同於 mvn pre-clean clean ,若是咱們運行 mvn post-clean ,那麼 pre-clean,clean 都會被運行。這是Maven很重要的一個規則,能夠大大簡化命令行的輸入。 下面看一下Site生命週期的各個階段: pre-site 執行一些須要在生成站點文檔以前完成的工做 site 生成項目的站點文檔 post-site 執行一些須要在生成站點文檔以後完成的工做,而且爲部署作準備 site-deploy 將生成的站點文檔部署到特定的服務器上 分支圖:
這裏常常用到的是site階段和site-deploy階段,用以生成和發佈Maven站點,這但是Maven至關強大的功能,Manager比較喜歡,文檔及統計數據自動生成,很好看。 最後,來看一下Maven的最重要的Default生命週期,絕大部分工做都發生在這個生命週期中,這裏,我只解釋一些比較重要和經常使用的階段:
記住,運行任何一個階段的時候,它前面的全部階段都會被運行,這也就是爲何咱們運行mvn install 的時候,代碼會被編譯,測試,打包。
Maven插件: Maven的核心分發包只有不到3MB的大小,Maven會在須要的時候下載並使用插件,對於插件自己,爲了可以複用代碼,它每每可以完成多個任務。Maven的生命週期與插件相互綁定,用以完成實際的【學Java,到凱哥學堂kaige123.com】構建任務。具體而言是生命週期的階段與插件的目標相互綁定,以完成某個具體的構建任務。 一個插件一般能夠完成多個任務,每個任務就叫作插件的一個目標。如執行mvn install命令時,調用的插件和執行的插件目標以下:
Maven的生命週期是抽象的,實際須要插件來完成任務,這一過程是經過將插件的目標(goal)綁定到生命週期的具體階段(phase)來完成的。如:將maven-compiler-plugin插件的compile目標綁定到default生命週期的compile階段,完成項目的源代碼編譯:
內置的綁定: Maven對一些生命週期的階段(phase)默認綁定了插件目標,由於不一樣的項目有jar、war、pom等不一樣的打包方式,所以對應的有不一樣的綁定關係,其中針對default生命週期的jar包打包方式的綁定關係以下:
第二列中,冒號後面便是綁定的插件目標,冒號前面是插件的前綴(prefix),是配置和使用插件的一種簡化方式。Plugin Prefix。
自定義綁定: 用戶能夠根據須要將任何插件目標綁定到任何生命週期的階段,如:將maven-source-plugin的jar-no-fork目標綁定到default生命週期的package階段,這樣,之後在執行mvn package命令打包項目時,在package階段以後會執行源代碼打包,生成如:ehcache-core-2.5.0-sources.jar形式的源碼包。
配置插件 Maven插件高度易擴展,能夠方便的進行自定義配置。如:配置maven-compiler-plugin插件編譯源代碼的JDK版本爲1.7:
總體的語法規則: