功能分层拆分、业务功能拆分?下面一个电商项目(Jmall)为例:java
按照项目功能分层,分为common(java工程)、dao(java工程)、service(java工程)、web(web工程)等git
按照业务拆分,分为common工程(java工程)、用户中心user(web工程)、商品中心goods(web工程)、订单中心order(web工程)、总web(web工程)web
随着业务复杂的增长、按照功能分层的拆分,每一个工程会愈来愈繁重,务必会达到瓶颈。可是按照业务功能的划分,每一个模块功能都是一个完整的web功能能够独立运行、开发、协做,同时又能合并成一个总的web的工程,使其组成一个平台,随着业务增长,能够从新拆分新的工程,更好的适应业务整合。推荐按照业务功能进行拆分spring
本人不善言辞,以为我说的不对,能够参考其余优秀的项目,例如spring业务按找业务功能进行拆分,以下图:apache
下面就开始以Jmall为例子按照业务划分的原则,开始搭建maven多工程项目app
首先建立一个父工程jmall(pom),用于管理eclipse
接下来建立common工程(java工程)jsp
接下来构建user工程(web工程)maven
依此类推,构建好其余工程,以下图所示:测试
其中须要注意的是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"?> <project xsi: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运行成功,以下图: