为什么写这个问题
今天在做架构设计时,出现了一个疑问,参考项目结构
这是一个工程下的两个module,其中common-model是公共model类,device-manage是一个业务模块,可以单独发布,后续还会有order-manage业务模块。他们都会共用common-model模块中的类。
这块产生一个疑问,当我发布 device-manage模块时,common-model中的类是都跟着device-manage模块一同发布,还是仅发布跟device-manage模块有关的类呢?带着这个疑问,做一个测试。
需要知道的
我使用的是idea编辑器,使用maven管理工程。当在maven的pom文件中没有如下声明时,
<packaging>war</packaging>
会默认打包为jar包。就是说maven执行package命令,默认打包成jar,
只有声明为war时,才会发布成war包,
war包是放在tomcat目录下用于发布web项目,jar包是供其他模块调用的。
知道了这些后我们就可以看下上边的工程结构
common-model是供其他模块调用的,保证是打包成jar的形式
device-manage是需要发布的web应用程序,所以是打包成war的形式。
测试
通过上边的分析,现将两个模块分别设置为jar和war的形式。
然后通过maven package命令 对两个模块分别打包。
查看device-manage模块下target文件夹,发现common-model是以jar的形式存在于device-manage模块下的lib目录中。
查看common-model.jar的目录发现,所有的类都被打包进去了。
看来自己想的太多了,现有的打包方式没那么智能。
虽然这块是全部打包了,但影响不大,无非就是多占用一点空间,虚拟机用到哪些类才会加载哪些类。不会影响性能。
当然这里还有一点需要注意,就是common-model依赖的所有jar包,都会被打包到device-manage模块下lib目录里。
总结
这篇文章算是对自己疑问的一个测试吧。所以说,这个公共model模块,可以把所有业务模块的model放在这里。不影响性能。
为了方便区分业务,可以把各个业务的model按照文件夹存放。当然,也可以只拎出公共model,非公共model都放在各自的业务模块中。这有一个缺点,就是假如后期有业务变更,还需将model再拎出来。