maven多模块

426 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第1天,点击查看活动详情

单模块

maven 是开发中很常用的工具,可以帮助我们管理项目的依赖,还可以帮助我们打包项目。除此之外,maven的模块化可以帮助我们管理模块之间的父子关系。当项目不大的时候,我们单模块就可以搞定,不需要用到maven的模块化管理。当项目的业务量比较大时,推荐使用maven模块化,降低代码之间的耦合度。

多模块

功能解耦,项目工程职能清晰

一个大项目要进行拆分,可以根据职责或业务拆分。

根据职责拆分,比如拆分成api和srv两部分。将接口的定义以及请求响应的dto类放到api模块,将业务逻辑的具体实现放到srv模块,使代码职责清晰。

根据业务拆分,比如拆分成以下模块:

auth-srv:鉴权模块
order-srv:订单模块
bill-srv:账单模块

项目结构清晰,也可以帮助新接触项目的人快速理解整个项目。

代码复用,可独立维护某个核心模块

对项目拆分成多个模块后,可依据不同模块由多个开发人员独立维护并行开发,开发人员职责清晰,也可以提高开发效率。

还可以将一些多个业务模块中都需要的代码放到一个公共的模块中,比如新建common模块作为公共服务模块,在需要common模块的业务模块中去引入common依赖。

例如,主pom.xml如下所示,

<packaging>pom</packaging>
<modules>
    <module>auth-srv</module>
    <module>order-srv</module>
    <module>bill-srv</module>
    <module>common</module>
</modules>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>

auth-srv模块用到common模块,它的pom.xml如下所示,

<parent>
    <artifactId>demo</artifactId>
    <groupId>com.example</groupId>
    <version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>auth-srv</artifactId>
<dependencies>
    <dependency>
        <groupId>com.example</groupId>
        <artifactId>common</artifactId>
         <version>0.0.1-SNAPSHOT</version>
    </dependency>
</dependencies>

便于编译、部署,可单独打包和部署

如果项目只有一个模块,我们改动其中一小个地方,也需要对整个项目进行重新编译、部署。使用多模块后,每个模块可以单独打包部署,maven指令可以通过参数指定你要构建的模块以及其依赖项。-pl指令可以指定要打包的模块,-am指令表示同时处理依赖项。

例如,如下指令用于打包auth-srv模块及其依赖项:

mvn package -pl auth-srv -am