maven构建企业级多模块项目(最好的划分模块方式)

我们在开发项目中,经常使用到多模块,根据不同功能划分模块,这样做能更方便的管理和解耦,那么,如何划分模块呢?

首先看两个很不错的帖子,参考下他们的做法:


A : http://juvenshun.iteye.com/blog/305865

该君的结构是这样的:

---- app-parent

             |-- pom.xml (pom)

             |

             |-- app-util

             |        |-- pom.xml (jar)

             |

             |-- app-dao

             |        |-- pom.xml (jar)

             |

             |-- app-service

             |        |-- pom.xml (jar)

             |

             |-- app-web

                      |-- pom.xml (war)


具体的依赖传递就是, app-> web -> app-service -> app-dao -> app-util, 首先说下这种方式确实不错,app-util 是工具类,可以做为顶级依赖,或打成jar包,公司可以普遍引用, 其他的模块也很清晰,但是美中不足的是,app-dao用不到util的东西,所以依赖util 无意义。


再来看看另个一个方案:

http://www.cnblogs.com/quanyongan/archive/2013/05/28/3103243.html




上图就是该项目的依赖关系,但是存在的问题就是,没有好好利用依赖传递,其实 core-> util和model, web直接依赖core 就行了;还存在的问题就是,没用使用

dependencyManager, 在父pom 使用这个管理jar 包版本,

如在pom.xml :

<properties>
    <commons-lang.version>2.4</commons-lang.version>
</properties>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>commons-lang</groupId>
            <artifactId>commons-lang</artifactId>
            <version>${commons-lang.version}</version>
        </dependency>
    </dependencies>
</dependencyManagement>

在子模块使用就直接依赖,不用写版本号了:

<dependencies>
    <dependency>
        <groupId>commons-lang</groupId>
        <artifactId>commons-lang</artifactId>
    </dependency>
</dependencies>

这这里要注意,dependencyManager 只是声明,并没有实际引入,子模块需要重新引入。



个人觉得,两个还存在的问题就是,dao、service 、model 属于技术上依赖的东西,可以统一放在一个模块里,比如一起放到app-common 里面

  


最后就是,如果是web项目,就直接

webapp -> app-common -> app-util


如果集成 api的项目,就直接

api -> app-common -> util 


如果集成批处理, 就是:

batch -> app-common -util


这样就简化了技术上的分块,而专注于业务上的划分。



总之这是我觉得更好的方式,欢迎大家讨论。




  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值