博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用maven构建多模块项目,分块开发
阅读量:5322 次
发布时间:2019-06-14

本文共 2379 字,大约阅读时间需要 7 分钟。

 

在多人使用Maven协作开发项目时,尤其是稍微上点规模的项目,每个RD的工作都细分到具体功能和模块,有些模块甚至还要单独部署。

我们假设有这样一个商城项目,包括以下几个模块:

  • 商城前台(shop)
  • 管理后台(admin)
  • 数据库交互模块(dao)
  • 通用业务模块(service)
  • 接口模块(api)
  • 通用工具(util)

其中shop和admin需要单独部署,dao、service、util你可能想要一些经验丰富的人来维护,如果使用一个应用来管理的话,所有的功能和模块都会耦合在一起,所有人都可以随意修改代码,这显然不是我们所期望的。

而且使用一个应用来管理的话,任何一个点的代码有变更,整个项目就需要重新build,使用模块化开发的另一个好处是如果dao的代码被修改,只需要重新build dao模块就可以了。web模块可以build成war,dao、service、util等可以build成jar,只需要配置好依赖关系,就可以实现模块间的解耦合。这样的设计才是遵循“高内聚,低耦合”设计原则的。

我们如何进行模块化开发呢?

我们使用上面的例子进行演示,先进行合理的优化,我们希望dao和service作为通用的底层工具来使用,把它们合并成一个核心模块(core),build成core.jar,简单的Maven模块化项目结构如下:

---------- mall         //顶级项目   |------ pom.xml //packaging = pom |------ mall-util //通用工具 | |--- pom.xml //packaging = jar |------ mall-core //核心模块 | |--- pom.xml //packaging = jar |------ mall-web-api //接口模块 | |--- pom.xml //packaging = war |------ mall-web-admin//管理后台 | |--- pom.xml //packaging = war |------ mall-web-shop//商城前台 | |--- pom.xml //packaging = war

 

这些模块中api、admin、shop均是可以单独部署的web应用,相互之间没有依赖关系,但都依赖于core模块,而core模块依赖于util模块。接下来我们按照上述确定的结构来搭建项目结构。

使用IDEA来创建Maven多模块项目

一、创建一个普通Maven项目

  1. New Project

image

  1. 填写基本信息,这里使用ipr作为项目描述文件

image

  1. 普通Maven项目不需要使用Maven模板搭建

image

二、给Maven项目添加模块

  1. New Module

image

  1. 填写基本信息,jar项目同样不需要使用Maven模板搭建

image

  1. 这个时候就可以看到,我们所添加的module已经被引入到parent的pom文件里了
com.mall
mall
pom
//打包方式为pom
1.0-SNAPSHOT
mall-util
  1. 变更util模块的构建方式为jar
mall
com.mall
1.0-SNAPSHOT
jar
//打包方式为jar
mall-util

三、给Maven项目添加web模块

  1. 创建一个module,并选中“Create from archetype”选项,同时maven模板选择webapp

image

  1. 接下来耐心的等待maven帮你创建好module,模块信息已经被添加
mall-util
mall-web-admin

目录结构如下:

image

pom:

mall
com.mall
1.0-SNAPSHOT
4.0.0
mall-web-admin
war
mall-web-admin
https://github.com/beiyoufx
junit
junit
3.8.1
test
mall-web-admin

四、添加模块间的依赖关系

  1. 增加core与util的依赖

image

  1. 增加admin与core的依赖关系

image

admin与core、util的依赖链

image

多模块项目的构建与发布

打包

image

所有在root项目中进行的构建都会传递到模块中,例如root中的package会打包整个项目,当文件有变动时会进行重新聚合,其他命令同理。模块中的package只会打包当前模块。

使用source:jar命令会将源码打包。

发布

web模块可以单独部署也可聚合部署。

 

 

转载于:https://www.cnblogs.com/jstarseven/p/9109512.html

你可能感兴趣的文章
倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)-点击运行按钮进入到运行状态报错Error starting TwinCAT System怎么办 AdsWarning1823怎么办...
查看>>
【转】javascript 中的很多有用的东西
查看>>
Centos7.2正常启动关闭CDH5.16.1
查看>>
Android 监听返回键、HOME键
查看>>
Android ContentProvider的实现
查看>>
sqlserver 各种判断是否存在(表名、函数、存储过程等)
查看>>
给C#学习者的建议 - CLR Via C# 读后感
查看>>
Recover Binary Search Tree
查看>>
Java 实践:生产者与消费者
查看>>
[转]IOCP--Socket IO模型终结篇
查看>>
js 获取视频的第一帧
查看>>
各种正则验证
查看>>
观察者模式(Observer)
查看>>
python中numpy.r_和numpy.c_
查看>>
egret3D与2D混合开发,画布尺寸不一致的问题
查看>>
freebsd 实现 tab 命令 补全 命令 提示
查看>>
struts1和struts2的区别
查看>>
函数之匿名函数
查看>>
shell习题第16题:查用户
查看>>
实验4 [bx]和loop的使用
查看>>