Maven 多模块配置、管理

随着项目的不断发展,需求的不断细化与添加,代码愈来愈多,结构也愈来愈复杂,这时候就会遇到各类问题bash

  • 不一样方面的代码之间相互耦合,这时候一系统出现问题很难定位到问题的出现缘由,即便定位到问题也很难修正问题,可能在修正问题的时候引入更多的问题。架构

  • 多方面的代码集中在一个总体结构中,新入的开发者很难对总体项目有直观的感觉,增长了新手介入开发的成本,须要有一个熟悉整个项目的开发者维护整个项目的结构(一般在项目较大且开发时间较长时这是很难作到的)。maven

  • 开发者对本身或者他人负责的代码边界很模糊,这是复杂项目中最容易遇到的,致使的结果就是开发者很容易修改了他人负责的代码且代码负责人还不知道,责任追踪很麻烦。ide

将一个复杂项目拆分红多个模块是解决上述问题的一个重要方法。 拆分的好处微服务

  • 多模块的划分能够下降代码之间的耦合性(从类级别的耦合提高到jar包级别的耦合)
  • 每一个模块均可以是自解释的(经过模块名或者模块文档)
  • 模块还规范了代码边界的划分,开发者很容易经过模块肯定本身所负责的内容
  • ...

模块拆分策略

推荐安照功能拆分,后期方便转换成微服务架构post

按职责划分

  • --module-test
    • --module-test-service
    • --module-test-po
    • --module-test-controller
    • --module-test-dao
    • --module-test-common
    • --module-test-util

按功能拆分

例如,在电商系统中以下module测试

  • --module-test
    • --module-test-common公共部分
    • --module-test-order订单
    • --module-test-checkout购物车
    • --module-test-pay支付
    • --module-test-catory类目
    • --module-test-product商品
    • --module-test-price价格
    • --module-test-account帐号

搭建多模块项目

搭建多模块项目,须要使用 maven 的继承和聚合,其中聚合负责将多个模块集中在一块儿进行管理,继承则负责各子模块中的公共配置idea

建立项目

我使用的是ideaspa

删掉srccode

pom文件内容

建立子模块

在项目下建立子模块

套路与建立普通项目一致

注意变化

module 的 pom 文件发生了变化

新增了两段配置

<packaging>pom</packaging>

<modules>
    <module>module-util</module>
</modules>
复制代码

pom 是最简单的打包类型。不像jar和war,它生成的构件只有它自己。将 packaging 申明为 pom 则意味着没有代码须要测试或者编译,也没有资源须要处理。

因为咱们使用了聚合,因此打包方式必须为pom,不然没法构建。

<modules>
    <module>module-util</module>
</modules>
复制代码

module的值是子模块相对于当前 POM 的路径

再看子模块中的 pom

也是分红两个部分

<parent>
    <groupId>com.wqlm</groupId>
    <artifactId>module</artifactId>
    <version>1.0-SNAPSHOT</version>
</parent>

<artifactId>module-util</artifactId>
复制代码
<parent>
    <groupId>com.wqlm</groupId>
    <artifactId>module</artifactId>
    <version>1.0-SNAPSHOT</version>
    <!--<relativePath/>-->
</parent>
复制代码

声明了该模块继承自 com.wqlm:module:1.0-SNAPSHOT,其实这里面还省略了 <relativePath></relativePath> 因为 relativePath 默认是 ../pom.xml 而咱们的子项目确实在父项目的下一级目录中,因此是能够不用填写的

Maven首先在当前构建项目的环境中查找父pom,而后项目所在的文件系统查找,而后是本地存储库,最后是远程repo。

artifactId 是子模块的组件id,因为继承了父pom,因此groupIdversion 也能够不写,不写的话就默认继承自父pom

使用多模块

如上所示,在建立多个模块以后,能够在父pom中添加公共配置,而后全部的子模块都会继承这些配置。除此以外,还能够通用对子模块进行 编译、打包、安装... 操做

子模块间的依赖

若是子模块间有依赖关系,须要在 dependency 中引入要依赖的子模块,如图

上图中子模块 module-common:1.0-SNAPSHOT 依赖了 module-util:1.0-SNAPSHOT。有一个问题不知道你们想过没,子模块间相关依赖,并且还有关系版本号,相互依赖一多起来,版本号很容易冲突。

解决这个问题的办法也很简单,就是使用** maven dependencyManagement**。 在父pom中加入 dependencyManagement

而后子模块中引用时,就能够不带版本号了
只要因此子模块都经过这种方式来引用其余子模块,那么在子模块的版本就都是父项目中定义都版本

关于 maven dependencyManagement 详情请参考 maven 依赖版本管理——depencyManagement

相关文章

maven 继承

maven 聚合

相关文章
相关标签/搜索