Maven多模块项目架构完整配置步骤与详细说明
Maven多模块架构配置分三步:先划分模块(如test、lang、das、service等),再基于依赖传递性理清模块间依赖,最后配置pom xml文件。总模块统一管理依赖版本,子模块只需声明父模块和依赖关系。合理规划模块职责可避免重复引用与版本冲突,提升构建效率。
项目用的是Ma ven多模块架构,但稍微一翻代码就发现问题了——好几个子模块的pom.xml里,都在重复引用同样的JAR包。
说起来,这个问题其实挺常见的。当初配置模块的时候,要么没想清楚每个模块到底该干什么,要么就是对Ma ven模块依赖的传递性没吃透。结果呢?依赖冗余、版本冲突、构建效率下降,一个接一个冒出来。
所以这篇内容,重点梳理一下Ma ven多模块的配置思路和实操流程。
在动手配之前,先大致了解整体框架——配置过程其实就三大步:先确定项目需要哪些模块,再理清模块之间的依赖关系,最后按依赖关系配好pom文件就行。
第一步:确定项目的模块划分
模块怎么分?其实没有任何强制要求,更多是看项目本身的情况。下面是一般项目的常见划分思路:
test集成测试模块:只放测试用例,不包含任何业务逻辑。facade对外服务接口模块(业务类项目一般较小,服务类项目比较常见):定义对外提供的接口、请求参数、返回结果等,作为一个独立的JAR包供其他项目依赖。client集成外部服务接口模块:功能跟facade对应,专门处理外部服务的依赖。lang基础公用模块:所有模块都会用的公共类,比如工具类、通用枚举等。das数据访问模块:封装DB层的代码,包括DO/DAO等。service领域核心服务模块:核心业务逻辑集中在这里。web/biz业务模块:处理具体的业务请求。如果业务比较复杂,还可以进一步拆分,比如web-user、web-order等。
按照这个思路,举个例子,模块划分可以这样:
ntopic-test集成测试模块ntopic业务逻辑模块,包含SpringBoot启动类、Web模块、业务逻辑等ntopic-servcie领域核心服务ntopic-client外部服务集成ntopic-dasDB操作ntopic-lang公共模块
第二步:确定各个模块的依赖关系
Ma ven模块的依赖有个很重要的特性——传递性。举个例子:如果模块A依赖模块B,模块B又依赖模块C,那么模块A会自动依赖模块C。这就像数学里数值大小的传递性,A>B且B>C,那A>C肯定成立。
结合这个特性,再看一下各个模块之间的依赖关系:
ntopic-test集成测试模块:它包含了所有代码逻辑,所以处于最上层。ntopic业务模块:业务逻辑需要依赖service模块提供核心服务。ntopic-service核心服务模块:它依赖DB数据读写,还要引入外部服务。ntopic-lang公共逻辑模块:进一步依赖其他统一模块,比如commons模块等。
第三步:Ma ven多模块实操
多模块配置的核心在pom.xml文件里。每个pom.xml模块,都至少需要配置五个核心元素:
groupId:大分组,一般用公司域名,比如com.aliaba。artifactId:具体的JAR包名,比如sequence-jdbc / fastjson。version:JAR包版本,比如1.0.1 / 1.2.76。packaging:模块打包方式,默认是jar,多模块的总模块或父模块用pom。name:模块名称,这个可选,但建议配上,方便识别。
总pom.xml文件
总pom.xml负责配置整个项目的所有信息,包括模块列表、依赖的JAR包、仓库地址和打包方式等。
父模块是可选的,不一定非要有。比如ntopic-boot基于SpringBoot框架,所以它的父模块直接用了SpringBoot的。
4.0.0 org.springframework.boot spring-boot-starter-parent 2.5.3 ntopic ntopic-parent 1.0.1 pom ntopic-parent
接下来指定本项目包含的模块列表:
ntopic-test ntopic ntopic-service ntopic-das ntopic-client ntopic-lang
依赖管理部分也很关键。在dependencyManagement里统一声明依赖,各个子模块直接用就行了,不必重复写版本号。
ntopic ntopic-lang ${ntopic.version} ntopic ntopic-client ${ntopic.version} org.springframework.boot spring-boot-starter-jdbc ${springboot.boot.version} com.google.gua va gua va 30.1.1-jre
此外,还需要配置额外的Ma ven仓库和打包方式:
Gitee-obullxl https://gitee.com/obullxl/ma ven-repository/raw/sequence-jdbc org.springframework.boot spring-boot-ma ven-plugin ${springboot.boot.version}
子模块pom.xml文件
总模块配好之后,子模块的配置就简单多了。只需要配置三个信息块:父模块、四元素(artifactId、packaging、version、name)和依赖的其他子模块。依赖关系就按照第二步的梳理来配。
4.0.0 ntopic ntopic-parent 1.0.1 ntopic-service jar ${ntopic.version} ntopic-service ntopic ntopic-das ntopic ntopic-client
编译项目各个模块
配置完成之后,直接执行编译命令就可以了:
mvn compile
编译成功的话,会看到类似这样的输出:
[INFO] ------------------------------------------------------------------------ [INFO] Reactor Summary: [INFO] [INFO] ntopic-parent ...................................... SUCCESS [ 0.022 s] [INFO] ntopic-lang ........................................ SUCCESS [ 0.873 s] [INFO] ntopic-das ......................................... SUCCESS [ 0.121 s] [INFO] ntopic-client ...................................... SUCCESS [ 0.042 s] [INFO] ntopic-service ..................................... SUCCESS [ 0.055 s] [INFO] ntopic ............................................. SUCCESS [ 0.073 s] [INFO] ntopic-test ........................................ SUCCESS [ 0.114 s] [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 2.094 s [INFO] Finished at: 2023-12-15T19:44:56+09:00 [INFO] Final Memory: 35M/448M [INFO] ------------------------------------------------------------------------
总结
以上就是Ma ven多模块架构的完整配置流程,从模块划分、依赖关系到实际配置,环环相扣。核心就是吃透依赖传递性,合理规划模块职责,避免重复引用和版本混乱。希望能提供一个清晰的参考。
游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。
同类文章
AWS RDS 数据库配置入门与基础操作指南
本文介绍了AWSRDS的基本概念与核心价值,即提供托管式关系数据库服务,简化运维。详细阐述了创建RDS实例的关键配置步骤,包括引擎选择、实例规格、存储与网络设置。最后,指导读者如何通过多种方式安全连接至数据库实例,并开始进行数据操作,为后续应用开发奠定基础。
PHP MVC中AJAX请求无法调用控制器方法的原因与解决方案
PHPMVC中AJAX请求返回整页HTML的常见原因是控制器方法未正确输出响应或未终止执行,导致框架渲染视图。解决方法是在控制器中设置JSON响应头、输出数据后调用exit()明确终止,同时前端使用小写url和dataType: "json "。
Go语言手动构造rsa.PublicKey:正确初始化大整数模数N完整指南
手动构造RSA公钥时,模数N为*big Int类型,不能直接使用超长十进制字面量,需通过SetString或UnmarshalText方法解析字符串。公钥指数E可直接赋值,推荐65537。生产环境应使用rsa GenerateKey生成密钥对,避免手动构造引发的安全和格式错误。
Go语言实现HTTP定时轮询监控多URL响应时间与状态检测
使用Go语言实现HTTP定时轮询监控,通过按行分割与Tab解析URL列表,避免闭包陷阱和nil指针,每个URL启动独立ticker安全并发请求,并配置超时控制与资源关闭,确保响应时间与状态码准确检测。
Tkinter中Label标签在主循环动态更新的正确方法
在Tkinter中正确动态更新标签的方法:将标签组件的textvariable参数绑定到一个StringVar变量,然后通过调用该变量的 set()方法更新其值,界面会自动刷新。这样避免直接修改text属性或调用update()。此做法实现数据与界面的解耦,代码更简洁,响应更及时,避免手动同步的闪烁,推荐做法。
- 热门数据榜
相关攻略
2026-07-10 06:41
2026-07-10 06:40
2026-07-10 06:39
2026-07-10 06:39
2026-07-10 06:39
2026-07-10 06:39
2026-07-10 06:39
2026-07-10 06:39
热门教程
- 游戏攻略
- 安卓教程
- 苹果教程
- 电脑教程

