一、为什么要用Maven多模块
假设有这样一个项目,很常见的Java Web应用。在这个应用中,我们分了几层:
Dao
Service
Web
对应的,在一个项目中,我们会看到一些包名:
org.xx.app.dao
org.xx.app.service
org.xx.app.web
org.xx.app.util
但随着项目的进行,你可能会遇到如下问题:
这个应用可能需要有一个前台和一个后台管理端,你发现大部分dao,一些service,和大部分util是在两个应用中可。
pom.xml中的依赖列表越来越长以重用的,但是,由于目前只有一个项目,你不得不新建一个项目依赖这个WAR.
build整个项目的时间越来越长,尽管你只是一直在web层工作,但你不得不build整个项目。
某个模块,比如util,你只想让一些经验丰富的人来维护,可是,现在这种情况,每个开发者都能修改,这导致关键模块的代码质量不能达到你的要求。
我们会发现,其实这里实际上没有遵守一个设计模式原则:“高内聚,低耦合”。虽然我们通过包名划分了层次,并且你还会说,这些包的依赖都是单向的,没有包的环依赖。这很好,但还不够,因为就构建层次来说,所有东西都被耦合在一起了。因此我们需要使用Maven划分模块。
一个简单的Maven模块结构是这样的:
---- app-xxx
|-- p