maven多模組專案,多web合併專案使用心得
此文章適合maven初學者或想接觸maven的使用者,講的只是皮毛,高手請自覺略過。
最近一直在搞fixflow5.2的升級工作,以前只知道maven好用,但是一直沒機會接觸,這次由於工作需要,終於有空看下maven了。
由於以前專案使用linksource來管理專案結構,用tomcat來除錯,習慣了,所以雖然決定用maven,但是還是習慣用tomcat來除錯。所以就一直在網上搜maven tomcat 多web,發現都是一些轉載的文章,而且都需要這外掛,那外掛的,感覺新手無從下手,不過幾天研究下來,覺得其實網上的方案都不是我想要的,其實有更簡單的,下面我就來簡單說下fixflow用maven來構建多web的過程。
這篇文章,我準備分3個部分來介紹:
- maven多模組專案。
- maven多web合併專案。
- maven多web合併專案在eclipse+tomcat環境下部署和除錯。
maven多模組專案
maven多模組專案需要一個父工程來聚合各個子模組,不過其實就是需要一個父pom.xml,主要作用是宣告子模組,程式碼如下:
<modules> <module>modules/fixflow-core</module> <module>modules/fixflow-expand</module> <module>modules/fixflow-common-api</module> <module>modules/fixflow-common-servlet</module> <module>modules/fixflow-manage-servlet</module> <module>modules/fixflow-webapp-common</module> <module>modules/fixflow-webapp-taskcenter</module> <module>modules/fixflow-webapp-managecenter</module> <module>modules/fixflow-webapp-explorer</module> <module>modules/fixflow-converter</module> <module>modules/fixflow-webapp-editor</module> </modules>
然後在子模組中,宣告父工程,子模組中程式碼如下:
<parent> <groupId>com.founder.fix.fixflow</groupId> <artifactId>fixflow-root</artifactId> <version>5.0</version> <relativePath>../..</relativePath> </parent>
關於多模組的文章,網上有很多,也都很詳細,這裡不再多說。
maven多web合併專案
多web專案合併,主要是我在網上找到的資料都不是我最終想要的效果,所以這裡就介紹下我最終使用的方案,網上有很多方案都是介紹用caro外掛,我到現在也不明白為什麼要使用這個外掛。
maven的多web模組maven-war-plugin外掛的overlays屬性來處理,最終主web專案pom.xml程式碼如下
<build> <finalName>bpmcenter</finalName> <plugins> <!-- 合併多個war --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <configuration> <packagingExcludes>WEB-INF/web.xml</packagingExcludes> <overlays> <overlay> <groupId>com.founder.fix.fixflow</groupId> <artifactId>fixflow-webapp-taskcenter</artifactId> </overlay> </overlays> </configuration> </plugin> </plugins> </build>
這裡使用到了maven-war-plugin,用overlay屬性已經足夠將多web合併了,只是用的過程中需要注意以下幾點:
- 被合併的子web專案packaging屬性必須是war
- 被合併的子web專案,必須在主專案中新增依賴關係。
- 被合併的子web專案中,如果沒有web.xml,則需要在pom.xml中宣告
<build> <finalName>fixflow-webapp-editor</finalName> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <configuration> <failOnMissingWebXml>false</failOnMissingWebXml> </configuration> </plugin> </plugins> </build>
做完以上幾點,多web專案合併就基本上做完了,執行mvn install就會發現打出的war包中已經存在了其他子模組的專案。
多web專案在eclipse+tomcat環境下部署除錯
在eclipse裡面使用,其實更簡單,只是網上的說法太複雜了而已,對於習慣了tomcat開發的使用者來說。
對於maven專案,一個環境到另一個環境應該只有pom.xml檔案和src資料夾就夠了,其他都是使用者根據自己的環境來做的。
- 開啟eclipse,修改本地maven倉庫地址,匯入maven專案,等待構建結束。
- 建立server,開啟window-prefrences-server-runTime Environment-new ....選擇tomcat路徑,jdk資訊,這一步和原來完全一樣。
- 開啟server檢視,new server,這裡選中剛才建立的tomcat,點選next,這步只需要主web專案新增進來即可。
- 雙擊建立的server,選擇將專案釋出到tomcat的webapps目錄下,點選pushlish,完成。
再去tomcat目錄,發現已經將合併後的web釋出到對應目錄下了。 引用的其他Java專案已經被打包成jar釋出到lib下了,不過你可以打個斷點試試,依然可以除錯,修改一段程式碼,發現熱部署也是可以的,這樣就和原來的開發習慣完全一樣了。
細心的使用者會發現,其實這完全和我們原來的構建,部署方式完全一樣,是的,maven沒有那麼複雜,m2eclipse maven plugin已經幫我們做好了太多的事情,maven只會讓我們專案之間的遷移更方便,更簡潔,這也是我喜歡上maven的重要原因。
我是一個絕對的maven新手,上面的文章用的也只是maven的皮毛而已,maven更多的構建功能還需要深入去研究,上面文章只是想告訴那些想嘗試maven的新手,其實maven不但對程式碼管理帶來了很大的方便,而且完全可以不改變我們原有的開發習慣。所以,盡情的擁抱maven吧!