【Maven3教程】Maven多工程、多模块
2019獨角獸企業重金招聘Python工程師標準>>>
項目工程拆分原則?
? ? 功能分層拆分、業務功能拆分?下面一個電商項目(Jmall)為例:
功能分層拆分
????按照項目功能分層,分為common(java工程)、dao(java工程)、service(java工程)、web(web工程)等
?
業務功能拆分
????按照業務拆分,分為common工程(java工程)、用戶中心user(web工程)、商品中心goods(web工程)、訂單中心order(web工程)、總web(web工程)
????
總結對比:
隨著業務復雜的增加、按照功能分層的拆分,每個工程會越來越繁重,務必會達到瓶頸。但是按照業務功能的劃分,每個模塊功能都是一個完整的web功能可以獨立運行、開發、協作,同時又能合并成一個總的web的工程,使其組成一個平臺,隨著業務增加,可以重新拆分新的工程,更好的適應業務整合。推薦按照業務功能進行拆分
本人不善言辭,覺得我說的不對,可以參考其他優秀的項目,例如spring業務按找業務功能進行拆分,如下圖:
下面就開始以Jmall為例子按照業務劃分的原則,開始搭建maven多工程項目
首先創建一個父工程jmall(pom),用于管理
接下來創建common工程(java工程)
接下來構建user工程(web工程)
依此類推,構建好其他工程,如下圖所示:
其中需要注意的是jmall-web工程是用于其他工程合并成總工程的項目
構建好工程之后,首先Install一下,看是否成功:
測試jmall-common的依賴
在jmall-common中新建一個BaseTest的基類,如下圖:
在jmall-user工程調用BaseTest,如下圖:
首先需要添加jmall-common工程的依賴:
調用如下:
執行結果如下:
合并總的web工程
合并為一個總的web工程,需要借助maven-war-plugin的插件,如下圖所示:
需要添加工程依賴,如下圖:
jmall-web完整的pom.xml,如下:
<?xml version="1.0"?> <projectxsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><modelVersion>4.0.0</modelVersion><parent><groupId>org.zhanghua</groupId><artifactId>jmall</artifactId><version>0.0.1-SNAPSHOT</version></parent><groupId>org.zhanghua</groupId><artifactId>jmall-web</artifactId><version>0.0.1-SNAPSHOT</version><packaging>war</packaging><name>jmall-web Maven Webapp</name><url>http://maven.apache.org</url><dependencies><dependency><groupId>org.zhanghua</groupId><artifactId>jmall-user</artifactId><version>0.0.1-SNAPSHOT</version><type>war</type></dependency><dependency><groupId>org.zhanghua</groupId><artifactId>jmall-goods</artifactId><version>0.0.1-SNAPSHOT</version><type>war</type></dependency><dependency><groupId>org.zhanghua</groupId><artifactId>jmall-order</artifactId><version>0.0.1-SNAPSHOT</version><type>war</type></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>3.8.1</version><scope>test</scope></dependency></dependencies><build><finalName>jmall-web</finalName><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-war-plugin</artifactId><version>2.6</version><configuration><overlays><overlay><groupId>org.zhanghua</groupId><artifactId>jmall-user</artifactId></overlay><overlay><groupId>org.zhanghua</groupId><artifactId>jmall-goods</artifactId></overlay><overlay><groupId>org.zhanghua</groupId><artifactId>jmall-order</artifactId></overlay></overlays></configuration></plugin><!-- jetty插件 --><plugin><groupId>org.mortbay.jetty</groupId><artifactId>jetty-maven-plugin</artifactId><version>7.6.15.v20140411</version><configuration><connectors><connector implementation="org.eclipse.jetty.server.nio.SelectChannelConnector"><port>9080</port></connector></connectors><webAppConfig><contextPath>/</contextPath></webAppConfig><systemProperties><systemProperty><name>org.mortbay.util.URI.charset</name><value>UTF-8</value></systemProperty></systemProperties></configuration></plugin></plugins></build> </project>接下來,我們執行install,看jmall-web的war是否已經把jmall-user,jmall-user,jmall-goods,jmall-order工程合并進來了,如下圖:
如上圖所示,合并正確,符合我們的要求.
注意到index.jsp只有一個了,我們每個工程里面都會有index.jsp,但是最后只有一個了,是因為我們jmall-web工程里面有index,會這個jmall-web的為準。
總結:如果多個war相同路徑且同名的文件,如果總的web工程里面有,那么總的這個會覆蓋分支的,如果總的沒有,那么看合并的順序,保留第一個順序的文件。
最后通過jetty:run運行成功,如下圖:
代碼地址:http://git.oschina.net/auhgnahz/jmall?
?
轉載于:https://my.oschina.net/Auhgnahz/blog/724950
總結
以上是生活随笔為你收集整理的【Maven3教程】Maven多工程、多模块的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring的lazy-init详解
- 下一篇: 关于java中普通代码块、构造代码块与静