1 、maven 多模块项目为什么有人按服务分 又有人按代码层分? 哪一种是最佳实践
按服务分:
按层分:
2 、假如按第一种服务分,如 github 上高达 46.4k star 的商城项目 https://github.com/macrozheng/mall
子模块被打包后、不同 jar 包中 中大量重复的 jar 包被引入( spring 的 jar 和 子模块的 jar 如 common ) 这样打出的包最后不是很大?这难道合理吗? 难道不是一个 jar 被多个项目引用吗?
3 、按层分多模块的意义到底在哪?网上找了很多好处说 感觉没有说服力。
4 、父项目把所有子项目都需的依赖放到dependencyManagement
里合适吗?
1
iyaozhen 2021-02-20 16:19:22 +08:00
我们是这样的
1. 按模块 /服务分,甚至某些子模块是要独立部署的服务 2. 这很正常呀 mall-search 、mall-admin 就是两个不同的服务(独立运行的 tomcat 实例、或者 docker ),肯定有重复的 3. 这种没太见过 4. parent pom 依赖有两种,dependencies 表示都有的依赖,这样子 pom 就不用重复定义了。dependencyManagement 是 parent 声明了版本,子 pom 只需要配置 groupId 、artifactId |
2
chendy 2021-02-20 16:24:38 +08:00
1. 按模块分
2. 上百 M 依赖+几百 K 自己的 class 是 java 项目常态,有需要做点镜像分层之类的优化就行 3. 纯没事找事,加一个接口直接打穿好几个模块一起改,图个啥 4. 合适 |
3
caixiaomao 2021-02-20 16:27:48 +08:00
习惯按模块分 清晰一点
|
4
chippai 2021-02-20 16:35:02 +08:00
user 、order 是俩个项目了
单个项目是会分 api 、service 、starter - user-api (对外提供 RPC)、 - user-serivce (服务实现 Provider)、 - user-starter (springboot 启动层(各种配置信息和 profile)) |
5
xuanbg 2021-02-20 16:35:45 +08:00
最讨厌多模块项目了……
搞不搞微服务,都是一个模块一个项目。 |
6
urzz 2021-02-20 16:39:39 +08:00
我一直很好奇选择多模块的原因是什么。。
|
7
zhady009 2021-02-20 16:43:26 +08:00
我们这边是打包把第三方的 jar 和源码分开
云盘上面先把第三方的 jar 按照集群应用放上去 启动参数 classpath 指定多一个对应的路径就好了 除非有第三方依赖更改才要更新 |
9
zliea 2021-02-20 17:04:12 +08:00
1. 按照服务分,多模块是为了多个服务共享某些相同的代码。
2. 开发阶段 maven 是一个 jar 被多个项目引用;但打包的时候如果不打包这些依赖,你需要保证在其他机器部署的时候,classpath 下需要有你用的 jar,而且需要保证版本不能和其他工程冲突。 3. 多模块其实就是为了共享相同的代码,假设一个商城,有商品系统、订单系统、支付系统,很多代码可以共享; 其实我觉得单独打包 jar+版本管理,才是比较好的选择。 4. 合适,首先子项目不需要些 version,首先可以保证版本一直,而且在版本升级(有漏洞的时候)可以保证大家都升上来了。 |
10
iseki 2021-02-20 19:05:43 +08:00
为什么打包全达成 fat-jar 。。。实际上你看看每个独立运行的 fat-jar 并不会重复包含 jar 作为 lib,在实际中这也是没必要的(除非你通过类加载器(你不能重复加载同一个类))
|
11
hantsy 2021-02-21 09:55:13 +08:00
分得太细,管理也是一样问题。曾经一个项目分的 Maven Module 多达 40 个。
现在的经验是,除非每个 Module 是单独部署,否则不分。 不同的(单独部署的) Moudle 之间有些类需要共享,抽出一个共享的 Module,如一些简单的 Dtos (用于统一 Caller 与 Callee 之间的格式)等,永远不要共享数据库等。 |
12
hantsy 2021-02-21 10:06:08 +08:00
在多模块 Parent/Child 依赖处理时,将所有的项目的依赖定义在 dependencyManagement 中,统一管理项目所有依赖,最顶层的 parent module 在项目中作为一个 BOM 存在,不要将添加任何 dependencies,dependencies 下所有的依赖声明会污染所有 Module 。
对于一个逻辑单元下 Module,如下结构,order-parent 存在父子结构,根据情况可以在父 pom 考虑添加 dependencies 。 parent -- -- --order-parent --- order-api --- order-model |
13
Joker123456789 2021-02-22 11:32:32 +08:00
按服务分的项目 一般是微服务项目,你可以展开看看,每个服务里面估计都分了 层的,也就是 web,service 这些,不过不一定是用模块来分层,也有用 包 分层的。
按层分的 基本是单体项目,业务模块不多,并发量不大,但是代码有点多,就干脆用模块来分层。 |
14
SkyLine7 2021-02-23 09:42:02 +08:00
我们两种 2 种结合用的,服务分子 pom,里面再按三层结构分
|