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
这样就简化了技术上的分块,而专注于业务上的划分。
总之这是我觉得更好的方式,欢迎大家讨论。