天天看點

Maven使用筆記(六)使用Maven進行多子產品拆分

子產品拆分是maven經常使用的功能,簡單梳理一下如何使用maven進行多子產品拆分,

隻做歸納總結,網上資料很多,不再一步一步實際建立和部署。

一個簡單的java web項目,maven子產品結構是這樣的:

Maven使用筆記(六)使用Maven進行多子產品拆分

上述示意圖中,有一個父項目(parent)聚合很多子項目(mytest-controller,mytest-util, mytest-dao, mytest-service, mytest-web)。每個項目,不管是父子,都含有一個pom.xml檔案。而且要注意的是,小括号中标出了每個項目的打包類型。父項目是pom,也隻能是pom。子項目有jar,或者war。根據它包含的内容具體考慮。

父項目聲明打包類型等:

1

2

3

4

<code>&lt;</code><code>groupid</code><code>&gt;my.test&lt;/</code><code>groupid</code><code>&gt;</code>

<code>&lt;</code><code>artifactid</code><code>&gt;mytest-parent&lt;/</code><code>artifactid</code><code>&gt;</code>

<code>&lt;</code><code>version</code><code>&gt;1.0&lt;/</code><code>version</code><code>&gt;</code>

<code>&lt;</code><code>packaging</code><code>&gt;pom&lt;/</code><code>packaging</code><code>&gt;</code>

聲明各個子子產品:

5

6

7

8

<code>&lt;</code><code>modules</code><code>&gt;</code>

<code>        </code><code>&lt;</code><code>module</code><code>&gt;mytest-controller&lt;/</code><code>module</code><code>&gt;</code>

<code>        </code><code>&lt;</code><code>module</code><code>&gt;mytest-service&lt;/</code><code>module</code><code>&gt;</code>

<code>        </code><code>&lt;</code><code>module</code><code>&gt;mytest-util&lt;/</code><code>module</code><code>&gt;</code>

<code>        </code><code>&lt;</code><code>module</code><code>&gt;mytest-dao&lt;/</code><code>module</code><code>&gt;</code>

<code>        </code><code>&lt;</code><code>module</code><code>&gt;mytest-web-1&lt;/</code><code>module</code><code>&gt;</code>

<code>        </code><code>&lt;</code><code>module</code><code>&gt;mytest-web-2&lt;/</code><code>module</code><code>&gt;</code>

<code>&lt;/</code><code>modules</code><code>&gt;</code>

然後在子子產品中,聲明父工程,子子產品中代碼如下:

<code>&lt;</code><code>parent</code><code>&gt;</code>

<code>        </code><code>&lt;</code><code>groupid</code><code>&gt;my.test&lt;/</code><code>groupid</code><code>&gt;</code>

<code>        </code><code>&lt;</code><code>artifactid</code><code>&gt;mytest-util&lt;/</code><code>artifactid</code><code>&gt;</code>

<code>        </code><code>&lt;</code><code>version</code><code>&gt;1.0&lt;/</code><code>version</code><code>&gt;</code>

<code>&lt;/</code><code>parent</code><code>&gt;</code>

一般來說,項目中需要的外部依賴等都在父項目中引入,這樣在子項目中省去了不必要的配置。

另外,各個子項目間的依賴在單獨的pom.xml中配置,

比如mytest-web項目依賴控制層的mytest-controller,那麼就在依賴中單獨配置:

<code>&lt;</code><code>dependency</code><code>&gt;</code>

<code>            </code><code>&lt;</code><code>groupid</code><code>&gt;my.test&lt;&lt;/</code><code>groupid</code><code>&gt;</code>

<code>            </code><code>&lt;</code><code>artifactid</code><code>&gt;mytest-controller&lt;/</code><code>artifactid</code><code>&gt;</code>

<code>            </code><code>&lt;</code><code>version</code><code>&gt;1.0&lt;/</code><code>version</code><code>&gt;</code>

<code>&lt;/</code><code>dependency</code><code>&gt;</code>

這就需要在項目拆分和架構之前需要理清各個子產品間的依賴關系。

如果是單個war項目,使用普通的建構方式即可,需要注意的是如果項目中包含多個war的子子產品,

需要使用maven的maven-war-plugin插件的overlays屬性來處理,最終主web項目pom.

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

<code>&lt;</code><code>build</code><code>&gt;</code>

<code>        </code><code>&lt;</code><code>finalname</code><code>&gt;xhcms&lt;/</code><code>finalname</code><code>&gt;</code>

<code>        </code><code>&lt;</code><code>plugins</code><code>&gt;</code>

<code>            </code><code>&lt;!-- 合并多個war --&gt;</code> 

<code>            </code><code>&lt;</code><code>plugin</code><code>&gt;</code>

<code>                </code><code>&lt;</code><code>groupid</code><code>&gt;org.apache.maven.plugins&lt;/</code><code>groupid</code><code>&gt;</code>

<code>                </code><code>&lt;</code><code>artifactid</code><code>&gt;maven-war-plugin&lt;/</code><code>artifactid</code><code>&gt;</code>

<code>                </code><code>&lt;</code><code>version</code><code>&gt;2.4&lt;/</code><code>version</code><code>&gt;</code>

<code>                </code><code>&lt;</code><code>configuration</code><code>&gt;</code>

<code>                    </code><code>&lt;</code><code>overlays</code><code>&gt;</code>

<code>                        </code><code>&lt;</code><code>overlay</code><code>&gt;</code>

<code>                            </code><code>&lt;</code><code>groupid</code><code>&gt;my.test&lt;/</code><code>groupid</code><code>&gt;</code>

<code>                            </code><code>&lt;</code><code>artifactid</code><code>&gt;my-test-web-1&lt;/</code><code>artifactid</code><code>&gt;</code>

<code>                            </code><code>&lt;</code><code>excludes</code><code>&gt;</code>

<code>                                </code><code>&lt;</code><code>exclude</code><code>&gt;web-inf/web.xml&lt;/</code><code>exclude</code><code>&gt;</code>

<code>                            </code><code>&lt;/</code><code>excludes</code><code>&gt;</code>

<code>                            </code><code>&lt;!-- 目标路徑 --&gt;</code>

<code>                            </code><code>&lt;</code><code>targetpath</code><code>&gt;test&lt;/</code><code>targetpath</code><code>&gt;</code>

<code>                        </code><code>&lt;/</code><code>overlay</code><code>&gt;</code>

<code>                    </code><code>&lt;/</code><code>overlays</code><code>&gt;</code>

<code>                </code><code>&lt;/</code><code>configuration</code><code>&gt;</code>

<code>            </code><code>&lt;/</code><code>plugin</code><code>&gt;</code>

<code>        </code><code>&lt;/</code><code>plugins</code><code>&gt;</code>

<code>    </code><code>&lt;/</code><code>build</code><code>&gt;</code>

  

如果項目配置正确,那麼直接使用eclipse的server插件,把最後的web項目部署到伺服器中就可以正常啟動和調試。