在软件开发中,把一个大项目分拆为多个模块是降低软件复杂度的有效方法:
┌ ─ ─ ─ ─ ─ ─ ┐ ┌─────────┐ │ │Module A │ │ └─────────┘ ┌──────────────┐ split │ ┌─────────┐ │ │Single Project│───────> │Module B │ └──────────────┘ │ └─────────┘ │ ┌─────────┐ │ │Module C │ │ └─────────┘ └ ─ ─ ─ ─ ─ ─ ┘
对于Maven工程来说,原来是一个大项目:
single-project ├── pom.xml └── src
现在可以分拆成3个模块:
single-project ├── module-a │ ├── pom.xml │ └── src ├── module-b │ ├── pom.xml │ └── src └── module-c ├── pom.xml └── src
Maven可以有效地管理多个模块,我们只需要把每个模块当作一个独立的Maven项目,它们有各自独立的pom.xml。例如,模块A的pom.xml:
模块B的pom.xml:
可以看出来,模块A和模块B的pom.xml高度相似,因此,我们可以提取出共同部分作为parent:
注意到parent的packaging是pom而不是jar,因为parent本身不含任何java代码。编写parent的pom.xml只是为了在各个模块中减少重复的配置。现在我们的整个工程结构如下:
single-project ├── parent │ └── pom.xml ├── module-a │ ├── pom.xml │ └── src ├── module-b │ ├── pom.xml │ └── src └── module-c ├── pom.xml └── src
如果模块A依赖模块B,则模块A需要模块B的jar包才能正常编译:
中央仓库