子產品拆分是maven經常使用的功能,簡單梳理一下如何使用maven進行多子產品拆分,
隻做歸納總結,網上資料很多,不再一步一步實際建立和部署。
一個簡單的java web項目,maven子產品結構是這樣的:
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5GcuIzM2IjNyAzNz0iNwkjNzkDNwEDMyEDM2EDMy0SM0MDNyUzLcFDM2EDMy8CXxQzM0ITNvw1ZvxmYvwVbvNmLzd2bsJmbj5SNxAjMzV2Zh1Wavw1LcpDc0RHaiojIsJye.png)
上述示意圖中,有一個父項目(parent)聚合很多子項目(mytest-controller,mytest-util, mytest-dao, mytest-service, mytest-web)。每個項目,不管是父子,都含有一個pom.xml檔案。而且要注意的是,小括号中标出了每個項目的打包類型。父項目是pom,也隻能是pom。子項目有jar,或者war。根據它包含的内容具體考慮。
父項目聲明打包類型等:
1
2
3
4
<code><</code><code>groupid</code><code>>my.test</</code><code>groupid</code><code>></code>
<code><</code><code>artifactid</code><code>>mytest-parent</</code><code>artifactid</code><code>></code>
<code><</code><code>version</code><code>>1.0</</code><code>version</code><code>></code>
<code><</code><code>packaging</code><code>>pom</</code><code>packaging</code><code>></code>
聲明各個子子產品:
5
6
7
8
<code><</code><code>modules</code><code>></code>
<code> </code><code><</code><code>module</code><code>>mytest-controller</</code><code>module</code><code>></code>
<code> </code><code><</code><code>module</code><code>>mytest-service</</code><code>module</code><code>></code>
<code> </code><code><</code><code>module</code><code>>mytest-util</</code><code>module</code><code>></code>
<code> </code><code><</code><code>module</code><code>>mytest-dao</</code><code>module</code><code>></code>
<code> </code><code><</code><code>module</code><code>>mytest-web-1</</code><code>module</code><code>></code>
<code> </code><code><</code><code>module</code><code>>mytest-web-2</</code><code>module</code><code>></code>
<code></</code><code>modules</code><code>></code>
然後在子子產品中,聲明父工程,子子產品中代碼如下:
<code><</code><code>parent</code><code>></code>
<code> </code><code><</code><code>groupid</code><code>>my.test</</code><code>groupid</code><code>></code>
<code> </code><code><</code><code>artifactid</code><code>>mytest-util</</code><code>artifactid</code><code>></code>
<code> </code><code><</code><code>version</code><code>>1.0</</code><code>version</code><code>></code>
<code></</code><code>parent</code><code>></code>
一般來說,項目中需要的外部依賴等都在父項目中引入,這樣在子項目中省去了不必要的配置。
另外,各個子項目間的依賴在單獨的pom.xml中配置,
比如mytest-web項目依賴控制層的mytest-controller,那麼就在依賴中單獨配置:
<code><</code><code>dependency</code><code>></code>
<code> </code><code><</code><code>groupid</code><code>>my.test<</</code><code>groupid</code><code>></code>
<code> </code><code><</code><code>artifactid</code><code>>mytest-controller</</code><code>artifactid</code><code>></code>
<code> </code><code><</code><code>version</code><code>>1.0</</code><code>version</code><code>></code>
<code></</code><code>dependency</code><code>></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><</code><code>build</code><code>></code>
<code> </code><code><</code><code>finalname</code><code>>xhcms</</code><code>finalname</code><code>></code>
<code> </code><code><</code><code>plugins</code><code>></code>
<code> </code><code><!-- 合并多個war --></code>
<code> </code><code><</code><code>plugin</code><code>></code>
<code> </code><code><</code><code>groupid</code><code>>org.apache.maven.plugins</</code><code>groupid</code><code>></code>
<code> </code><code><</code><code>artifactid</code><code>>maven-war-plugin</</code><code>artifactid</code><code>></code>
<code> </code><code><</code><code>version</code><code>>2.4</</code><code>version</code><code>></code>
<code> </code><code><</code><code>configuration</code><code>></code>
<code> </code><code><</code><code>overlays</code><code>></code>
<code> </code><code><</code><code>overlay</code><code>></code>
<code> </code><code><</code><code>groupid</code><code>>my.test</</code><code>groupid</code><code>></code>
<code> </code><code><</code><code>artifactid</code><code>>my-test-web-1</</code><code>artifactid</code><code>></code>
<code> </code><code><</code><code>excludes</code><code>></code>
<code> </code><code><</code><code>exclude</code><code>>web-inf/web.xml</</code><code>exclude</code><code>></code>
<code> </code><code></</code><code>excludes</code><code>></code>
<code> </code><code><!-- 目标路徑 --></code>
<code> </code><code><</code><code>targetpath</code><code>>test</</code><code>targetpath</code><code>></code>
<code> </code><code></</code><code>overlay</code><code>></code>
<code> </code><code></</code><code>overlays</code><code>></code>
<code> </code><code></</code><code>configuration</code><code>></code>
<code> </code><code></</code><code>plugin</code><code>></code>
<code> </code><code></</code><code>plugins</code><code>></code>
<code> </code><code></</code><code>build</code><code>></code>
如果項目配置正确,那麼直接使用eclipse的server插件,把最後的web項目部署到伺服器中就可以正常啟動和調試。