1. 程式人生 > >Maven 之多模組構建

Maven 之多模組構建

專案的打包型別:pom、jar、war

  專案中一般使用maven進行模組管理,每個模組下對應都有一個pom檔案,pom檔案中維護了各模組之間的依賴和繼承關係。專案模組化可以將通用的部分抽離出來,方便重用;修改一部分程式碼不再是build整個專案,縮短了build時間;此外各模組都有自己的pom檔案,結構更清晰。

  使用maven進行模組劃分管理,一般都會有一個父級專案,pom檔案除了GAV(groupId, artifactId, version)是必須要配置的,另一個重要的屬性就是packaging打包型別,所有的父級專案的packaging都為pom,packaging預設是jar型別,如果不作配置,maven會將該專案打成jar包。作為父級專案,還有一個重要的屬性,那就是modules,通過modules標籤將專案的所有子專案引用進來,在build父級專案時,會根據子模組的相互依賴關係整理一個build順序,然後依次build。

  而對於各個子專案,需要在其對應的pom檔案開頭申明對父級專案的引用,通過GAV實現。對於子專案自己的GAV配置,GV如果不配置,則會從父級專案的配置繼承過來。子模組可通過dependencies標籤來新增自己的依賴,此外子類專案的packaging值只能是war或者jar,前面已經說過,packaging預設是jar型別。如果是需要部署的專案,則需要打包成war型別,如果只是內部呼叫或者是作服務使用,則推薦打包成jar型別。

1. packaging

packaging給出了專案的打包型別,即作為專案的釋出形式,其可能的型別。在Maven 3中,其可用的打包型別如下:

jar,預設型別
war
ejb
ear
rar
par
pom
maven-plugin
2.multi-modules

Maven 3支援Maven專案的多模組(multi-modules)結構。這樣的Maven專案也被稱為聚合專案,通常由一個父模組和若干個子模組構成。

其中,父模組必須以pom打包型別,同時以<modules>給出所有的子模組。父模組的POM示例如下:

...
<packaging>pom</packaging>

<modules>
<module>my-frontend-project</module>
<module>my-service-project</module>
<module
>my-backend-project</module> </modules> ...


其中的每個module,都是另外一個Maven專案

 一個專案可能會有多個子module,在特定情況下可能只需要build其中幾個module。

例如我的專案的目錄結構如下

myproject

|------------module_one

|------------module_two

|------------module_three

|------------module_four

|------------module_five

|------------module_six

|------------module_seven

|------------pom.xml

解決方法一:

例:我想要build module_three,module_five,module_seven三個子module

在根pom同一級目錄執行如下命令:

mvn clean install -pl module_three,module_five,module_seven

也可以在此命令上加上以下引數

-am 不僅build module_three,module_five,module_seven這三個,而且build這些子module require的其他專案,require是指其parent專案。

-amd 不僅build module_three,module_five,module_seven這三個,而且build依賴這三個module的專案,如module_other。

 

解決方法二:

增加一個profile,如:

複製程式碼
<profiles>      
  <profile>
            <id>patch_001</id>
            <properties>
                
            </properties>
            <modules>
                <module>module_three</module>
                <module>module_five</module>
                <module>module_seven</module>
            </modules>
        </profile>
</profiles>
複製程式碼

然後執行maven命令:

mvn clean install -Ppatch_001  #這樣也可以只build這三個子module

PS:我採用第二種方法的時候,發現在profile這樣定義了所要build的module後,