【Maven3教程】Maven多工程、多模块
2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
項(xiàng)目工程拆分原則?
? ? 功能分層拆分、業(yè)務(wù)功能拆分?下面一個(gè)電商項(xiàng)目(Jmall)為例:
功能分層拆分
????按照項(xiàng)目功能分層,分為common(java工程)、dao(java工程)、service(java工程)、web(web工程)等
?
業(yè)務(wù)功能拆分
????按照業(yè)務(wù)拆分,分為common工程(java工程)、用戶中心user(web工程)、商品中心goods(web工程)、訂單中心order(web工程)、總web(web工程)
????
總結(jié)對比:
隨著業(yè)務(wù)復(fù)雜的增加、按照功能分層的拆分,每個(gè)工程會越來越繁重,務(wù)必會達(dá)到瓶頸。但是按照業(yè)務(wù)功能的劃分,每個(gè)模塊功能都是一個(gè)完整的web功能可以獨(dú)立運(yùn)行、開發(fā)、協(xié)作,同時(shí)又能合并成一個(gè)總的web的工程,使其組成一個(gè)平臺,隨著業(yè)務(wù)增加,可以重新拆分新的工程,更好的適應(yīng)業(yè)務(wù)整合。推薦按照業(yè)務(wù)功能進(jìn)行拆分
本人不善言辭,覺得我說的不對,可以參考其他優(yōu)秀的項(xiàng)目,例如spring業(yè)務(wù)按找業(yè)務(wù)功能進(jìn)行拆分,如下圖:
下面就開始以Jmall為例子按照業(yè)務(wù)劃分的原則,開始搭建maven多工程項(xiàng)目
首先創(chuàng)建一個(gè)父工程jmall(pom),用于管理
接下來創(chuàng)建common工程(java工程)
接下來構(gòu)建user工程(web工程)
依此類推,構(gòu)建好其他工程,如下圖所示:
其中需要注意的是jmall-web工程是用于其他工程合并成總工程的項(xiàng)目
構(gòu)建好工程之后,首先Install一下,看是否成功:
測試jmall-common的依賴
在jmall-common中新建一個(gè)BaseTest的基類,如下圖:
在jmall-user工程調(diào)用BaseTest,如下圖:
首先需要添加jmall-common工程的依賴:
調(diào)用如下:
執(zhí)行結(jié)果如下:
合并總的web工程
合并為一個(gè)總的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>接下來,我們執(zhí)行install,看jmall-web的war是否已經(jīng)把jmall-user,jmall-user,jmall-goods,jmall-order工程合并進(jìn)來了,如下圖:
如上圖所示,合并正確,符合我們的要求.
注意到index.jsp只有一個(gè)了,我們每個(gè)工程里面都會有index.jsp,但是最后只有一個(gè)了,是因?yàn)槲覀僯mall-web工程里面有index,會這個(gè)jmall-web的為準(zhǔn)。
總結(jié):如果多個(gè)war相同路徑且同名的文件,如果總的web工程里面有,那么總的這個(gè)會覆蓋分支的,如果總的沒有,那么看合并的順序,保留第一個(gè)順序的文件。
最后通過jetty:run運(yùn)行成功,如下圖:
代碼地址:http://git.oschina.net/auhgnahz/jmall?
?
轉(zhuǎn)載于:https://my.oschina.net/Auhgnahz/blog/724950
總結(jié)
以上是生活随笔為你收集整理的【Maven3教程】Maven多工程、多模块的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring的lazy-init详解
- 下一篇: 关于java中普通代码块、构造代码块与静