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

来源:互联网 发布:青年网络公开课 张捷 编辑:程序博客网 时间:2024/06/04 21:53

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

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


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


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



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