maven筆記4--聚合與繼承

前言:

maven的聚合特性能把項目的各個模塊聚合在一起構建,maven的繼承特性則能幫助抽取各個模塊相同的依賴和插件等配置,在簡化POM的同時還成促進各個模塊配置的一致性。

測試類的包名結構和實際代碼保持一致,測試類中不測試實現,只測試接口,也就是說測試代碼不能引用實現類。

聚合:快速構建項目
繼承:消除重複配置

聚合

方便一次構建聚合項目下的各個子模塊。
打包方式爲pom,僅僅是幫助聚合其他模塊構建的工具,本身並無實質的內容。

當在聚合模塊執行mvn命令時,首先會解析聚合模塊的POM,分析要構建的模塊,並計算出一個反應堆構建順序(Reactor Build Order),然後根據這個順序依次構建各個模塊。

繼承

父工程打包類型也必須爲pom。父模塊只是爲了幫助消除配置的重複,因此它本身不包含除POM之外的項目文件,也就不需要src/main/java/之類的文件夾了。

relativePath  表示父模塊POM的相對路徑。maven首先根據relativePath檢查父POM,如果找不到,再從本地倉庫查找。relativePath的默認值是../pom.xml。即maven中默認父pom是在上一層目錄下


可繼承的POM元素

  • groupId:項目組ID
  • version:項目版本
  • description:項目描述信息
  • organization:項目組織信息
  • inceptionYear:項目創世年份
  • url:項目URL地址
  • developers:項目開發者信息
  • contributors:項目貢獻者信息
  • distributionManagement:項目部署配置
  • issueManagement:項目缺陷跟蹤系統信息
  • ciManagement:項目持續集成系統信息
  • scm:項目版本控制系統信息
  • mailingLists:郵件列表信息
  • properites:自定義的Maven屬性
  • dependencies:項目依賴配置
  • dependencyManagement:依賴管理配置
  • repositories:倉庫配置
  • build:源碼目錄配置,輸出目錄配置,插件配置,插件管理配置等
  • reporting:項目報告輸出目錄配置,報告插件配置等

依賴管理

由於dependencies元素可繼承,所以可以提取公共的項目依賴到父模塊中。
dependencyManagement元素既能讓子模塊繼承到父模塊的依賴配置,又能保證子模塊依賴使用的靈活性。
dependencyManagement元素下的依賴聲明不會引入實際的依賴,但它能約束dependencies下的依賴使用。

引入其他pom的dependencyManagement合併到當前pom中。配置如下:
在parent的pom.xml配置文件中加上如下配置,import依賴範圍只在dependencyManagement下有效

插件管理

pluginManagement
該元素中配置的依賴不會造成實際的插件調用行爲,當POM中配置了真正的plugin元素,並且和pluginManagement中配置的插件匹配時,pluginManagement的配置纔會影響實際的插件行爲。

當多個模塊引用相同的插件配置時,就將插件配置到父POM的pluginManagement中進行管理(統一聲明插件的版本),子插件在引用時,不需要配置版本等信息。

聚合與集成的關係

聚合:快速構建項目
繼承:消除重複配置
Convention Over Configuration:約定優於配置
maven默認規定:
  • 源碼目錄         src/main/java
  • 編譯輸出目錄  target/classes/
  • 打包方式         jar
  • 包輸出目錄      target/
也可自定義源碼路徑:(極度不建議),在build下配置


超級POM:任何一個Maven項目都隱式地繼承自該POM,類似Java的Object類
超級POM路徑:$MAVEN_HOME/lib/maven-model-builder-x.x.x.jar中的  org/apache/maven/model/pom-4.0.0.xml

默認配置了倉庫和插件倉庫的地址,都是中央倉庫且都關閉了對SNAPSHOT的支持。

也定義了maven項目的詳細信息
主輸出目錄,主代碼輸出目錄,最終構建的名稱,測試代碼輸出目錄,主源代碼目錄,腳本源代碼目錄,測試代碼目錄,主資源目錄和測試資源目錄

爲核心插件設定版本

反應堆

在多模塊Maven項目中,反應堆(Reactor)指所有模塊組成的一個構建結構。包含了各個模塊間的繼承和依賴關係。
單模塊項目,反應堆就是該模塊本身。

反應堆的構建順序

maven按順序讀取POM,如果POM沒有依賴模塊,就構建該模塊,否則就先構建依賴的模塊,依次類推。模塊間的依賴關係會將反應堆構成一個有向非循環圖(Directed  Acyclic Graph,DAG),即依賴關係不允許出現循環

裁剪反應堆

如果我們只需要構建完整反應堆中的某些個模塊,就需要使用下面這些mvn命令
  • -am       also  make                                 同時構建所列模塊的依賴模塊
  • -amd     also  make  dependents            同時構建依賴於所列模塊的模塊
  • -pl         projects<arg>                             構建指定的模塊,模塊間用逗號分隔
  • -rf          resume  from<arg>                    從定製模塊恢復反應堆
例子:
  • -pl      從聚合模塊上只構建指定的模塊  

clean install -DskipTests=true -pl hlp-ubp-facade,hlp-ubp-service

  • -am    同時構建所列模塊的依賴模塊,hlp-ubp,hlp-ubp-facade都會被構建    -am

clean install -DskipTests=true -pl hlp-ubp-facade –am

  • -amd   同時構建依賴於所列模塊的模塊,hlp-ubp-service,hlp-ubp-web模塊都被構建了

clean install -DskipTests=true -pl hlp-ubp-facade –amd



  • 原來反應堆的構建順序 

  • -rf     指定從反應堆的哪個模塊開始構建

clean install -DskipTests=true -rf hlp-ubp-frontweb


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章