【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多工程、多模块相关推荐
- 解决导入的maven聚合工程中子模块项目不显示
导入的maven聚合工程中没有子模块,最主要的原因是没有选择正确的导入方式.应该选择maven projects来导入.
- maven 聚合工程 用spring boot 搭建 spring cloud 微服务 模块式开发项目
项目的简单介绍: 项目采用maven聚合工程 用spring boot 搭建 spring cloud的微服务 模块式开发 项目的截图: 搭建开始: 能上图 我少打字 1.首先搭建maven的聚合工程 ...
- Intellij Idea 多模块Maven工程中模块之间无法相互引用问题
一.问题背景 在Intellij idea中,新建Maven项目,在魔项目中新建多个模块,发现模块间相互调用失败 二.问题原因 模块间无法相互引用为IDEA的一个BUG 三.问题解决 1.点击项目右上 ...
- Maven 聚合工程 Could not find artifact 父模块找不到异常
说明 我们在利用Maven建立一个多模块的聚合工程时,可能会遇到这样的问题,那就是Could not find artifact xxx,并且不能找到的artifact 正是父工程 项目结构 此图是我 ...
- 从零使用Maven搭建ssm多模块
从零使用Maven搭建ssm多模块 1,maven基本环境搭建安装 下载解压Maven,并配置Maven环境变量.修改maven配置文件setting.xml,指定本地资源库路径,可单独将maven中 ...
- Maven多工程的创建
元旦过去的第六天,天气很凉爽,躲在室内.其实我也不是宅,关键这个天气出去一个小伙子瞎逛,人家多半或认为我有点傻.所以想想部署一个maven多工程的项目.所谓的多工程,其实也是称为微服务.就是我们把ap ...
- Verilog初级教程(7)Verilog模块例化以及悬空端口的处理
博文目录 写在前面 正文 按顺序排列的端口连接 按名称排列的端口连接 未连接/悬空端口处理 关于模块端口的说明 参考资料 交个朋友 写在前面 此系列相关博文: Verilog初级教程(6)Verilo ...
- sonarqube中,分析maven聚合工程时,不必分析parent工程,只需分析下面的module子工程即可
sonarqube中,分析maven聚合工程时,不必分析parent工程,只需分析下面的module子工程即可 cd ../../xxx-sms # mvn clean org.jacoco:jaco ...
- Eclipse——Maven项目工程无法编译但可以运行解决方案
问题描述 Maven项目工程无法编译但可以运行. 只能运行上一次成功的版本. 问题分析 pom.xml文件错误. 解决方案 方案一:选中项目 --> 右键 --> Maven --> ...
- 工程和模块的关系以及继承和依赖的概念
工程和模块的区别: 工程不等于完整的项目,模块也不等于完整的项目,一个完整的项目看的是代码,代码完整,就可以说这是一个完整的项目 和此项目是工程和模块没有关系. 工程天生只能使用自己内部资源,工程天生 ...
最新文章
- 深入理解Java的接口和抽象类
- 编译安装PHP 时遇到问题解决方法.
- linux远程白名单,Linux的Iptables命令实战2—设置白名单
- TestInside640-801 v11(神州testv11)题库视频讲解(全部上传完毕)
- centos中使用rpm包或yum命令在线安装的软件默认是安装在那个目录下
- 编写一个求方程ax2 + bx + c = 0的根 的程序,用3个函数分别求当b2-4ac大于零、等于零、和小于零时的方程的根。要求从主函数输入a,b,c的值并输出结果。
- es6-super关键字
- 【批处理学习笔记】第十四课:常用DOS命令(4)
- 类的构造函数和析构函数、默认构造函数
- 在哪里学python-在合肥哪里可以学Python
- Mybatis JdbcType与Oracle、MySql数据类型对应列表
- 泛微oa java .net_第三方系统向泛微OA系统推送消息
- Rbf神经网络使用Tensorflow实现
- 喝酒娱乐小游戏微信小程序源码
- 华为U2000网管研究实录 (2) - 数据库与第三方组件
- 国内wifi用不了谷歌_如何使用Google Wifi阻止不适当的网站
- win10设置计算机关机时间,教你windows10电脑怎么设置定时关机
- Linux系统下启动DB2以及一些常用命令
- Eclipse快捷方式无法在桌面上打开
- 共享打印机提示服务器没有运行,提示无法共享打印机: “无法显示该属性,后台打印程序服务未运行”...