模块管理

在软件开发中,把一个大项目分拆为多个模块是降低软件复杂度的有效方法:

                      ┌ ─ ─ ─ ─ ─ ─ ┐
                        ┌─────────┐
                      │ │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包才能正常编译:

中央仓库

其实我们使用的大多数第三方模块都是这个用法,例如,我们使用commons logging、log4j这些第三方模块,就是第三方模块的开发者自己把编译好的jar包发布到maven的中央仓库中。

私有仓库

本地仓库

但是我们不推荐把自己的模块安装到maven的本地仓库,因为每次修改模块b的源码,都需要重新安装,容易出现版本不一致的情况

推荐的做法是模块化编译,在编译的时候,告诉maven几个模块之间存在依赖关系,需要一块编译,maven就会自动按依赖顺序编译这些模块

<modules>
    <module>模块A</module>
    <module>模块B</module>
    <module>模块C</module>
</modules>

Maven支持模块化管理,可以把一个大项目拆成几个模块可以通过继承在parent的pom.xml统一定义重复配置可以通过<modules>编译多个模块

读后有收获可以支付宝请作者喝咖啡,读后有疑问请加微信群讨论

mokuaiguanli\_1.pngmokuaiguanli\_2.png

看完两件小事

如果你觉得这篇文章对你挺有启发,我想请你帮我两个小忙:

  1. 关注我们的 GitHub 博客,让我们成为长期关系
  2. 把这篇文章分享给你的朋友 / 交流群,让更多的人看到,一起进步,一起成长!
  3. 关注公众号 「方志朋」,公众号后台回复「资源」 免费领取我精心整理的前端进阶资源教程

JS中文网是中国领先的新一代开发者社区和专业的技术媒体,一个帮助开发者成长的社区,目前已经覆盖和服务了超过 300 万开发者,你每天都可以在这里找到技术世界的头条内容。欢迎热爱技术的你一起加入交流与学习,JS中文网的使命是帮助开发者用代码改变世界

results matching ""

    No results matching ""