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多工程、多模块相关推荐

  1. 解决导入的maven聚合工程中子模块项目不显示

    导入的maven聚合工程中没有子模块,最主要的原因是没有选择正确的导入方式.应该选择maven projects来导入.

  2. maven 聚合工程 用spring boot 搭建 spring cloud 微服务 模块式开发项目

    项目的简单介绍: 项目采用maven聚合工程 用spring boot 搭建 spring cloud的微服务 模块式开发 项目的截图: 搭建开始: 能上图 我少打字 1.首先搭建maven的聚合工程 ...

  3. Intellij Idea 多模块Maven工程中模块之间无法相互引用问题

    一.问题背景 在Intellij idea中,新建Maven项目,在魔项目中新建多个模块,发现模块间相互调用失败 二.问题原因 模块间无法相互引用为IDEA的一个BUG 三.问题解决 1.点击项目右上 ...

  4. Maven 聚合工程 Could not find artifact 父模块找不到异常

    说明 我们在利用Maven建立一个多模块的聚合工程时,可能会遇到这样的问题,那就是Could not find artifact xxx,并且不能找到的artifact 正是父工程 项目结构 此图是我 ...

  5. 从零使用Maven搭建ssm多模块

    从零使用Maven搭建ssm多模块 1,maven基本环境搭建安装 下载解压Maven,并配置Maven环境变量.修改maven配置文件setting.xml,指定本地资源库路径,可单独将maven中 ...

  6. Maven多工程的创建

    元旦过去的第六天,天气很凉爽,躲在室内.其实我也不是宅,关键这个天气出去一个小伙子瞎逛,人家多半或认为我有点傻.所以想想部署一个maven多工程的项目.所谓的多工程,其实也是称为微服务.就是我们把ap ...

  7. Verilog初级教程(7)Verilog模块例化以及悬空端口的处理

    博文目录 写在前面 正文 按顺序排列的端口连接 按名称排列的端口连接 未连接/悬空端口处理 关于模块端口的说明 参考资料 交个朋友 写在前面 此系列相关博文: Verilog初级教程(6)Verilo ...

  8. sonarqube中,分析maven聚合工程时,不必分析parent工程,只需分析下面的module子工程即可

    sonarqube中,分析maven聚合工程时,不必分析parent工程,只需分析下面的module子工程即可 cd ../../xxx-sms # mvn clean org.jacoco:jaco ...

  9. Eclipse——Maven项目工程无法编译但可以运行解决方案

    问题描述 Maven项目工程无法编译但可以运行. 只能运行上一次成功的版本. 问题分析 pom.xml文件错误. 解决方案 方案一:选中项目 --> 右键 --> Maven --> ...

  10. 工程和模块的关系以及继承和依赖的概念

    工程和模块的区别: 工程不等于完整的项目,模块也不等于完整的项目,一个完整的项目看的是代码,代码完整,就可以说这是一个完整的项目 和此项目是工程和模块没有关系. 工程天生只能使用自己内部资源,工程天生 ...

最新文章

  1. 深入理解Java的接口和抽象类
  2. 编译安装PHP 时遇到问题解决方法.
  3. linux远程白名单,Linux的Iptables命令实战2—设置白名单
  4. TestInside640-801 v11(神州testv11)题库视频讲解(全部上传完毕)
  5. centos中使用rpm包或yum命令在线安装的软件默认是安装在那个目录下
  6. 编写一个求方程ax2 + bx + c = 0的根 的程序,用3个函数分别求当b2-4ac大于零、等于零、和小于零时的方程的根。要求从主函数输入a,b,c的值并输出结果。
  7. es6-super关键字
  8. 【批处理学习笔记】第十四课:常用DOS命令(4)
  9. 类的构造函数和析构函数、默认构造函数
  10. 在哪里学python-在合肥哪里可以学Python
  11. Mybatis JdbcType与Oracle、MySql数据类型对应列表
  12. 泛微oa java .net_第三方系统向泛微OA系统推送消息
  13. Rbf神经网络使用Tensorflow实现
  14. 喝酒娱乐小游戏微信小程序源码
  15. 华为U2000网管研究实录 (2) - 数据库与第三方组件
  16. 国内wifi用不了谷歌_如何使用Google Wifi阻止不适当的网站
  17. win10设置计算机关机时间,教你windows10电脑怎么设置定时关机
  18. Linux系统下启动DB2以及一些常用命令
  19. Eclipse快捷方式无法在桌面上打开
  20. 共享打印机提示服务器没有运行,提示无法共享打印机: “无法显示该属性,后台打印程序服务未运行”...

热门文章

  1. android 处理双击事件
  2. MICROSOFT SQL SERVER 2005 SEPTEMPTER CTP下载
  3. Kosaraju 算法查找强连通分支
  4. nginx反代理服务器
  5. [NOIP2007] 提高组 洛谷P1099 树网的核
  6. 求助:国际化中资源文件不在classpath中的问题
  7. 网页如何调用flash的方法
  8. service和thread的区别,何时用service,何时用thread?
  9. 给gridview动态生成radiobutton添加OnCheckedChanged事件
  10. 用Hadoop进行分布式并行编程