游乐游手机版
首页/编程语言/文章详情

Maven多模块项目架构完整配置步骤与详细说明

时间:2026-06-10 06:49
Maven多模块架构配置分三步:先划分模块(如test、lang、das、service等),再基于依赖传递性理清模块间依赖,最后配置pom xml文件。总模块统一管理依赖版本,子模块只需声明父模块和依赖关系。合理规划模块职责可避免重复引用与版本冲突,提升构建效率。

项目用的是Ma ven多模块架构,但稍微一翻代码就发现问题了——好几个子模块的pom.xml里,都在重复引用同样的JAR包。

说起来,这个问题其实挺常见的。当初配置模块的时候,要么没想清楚每个模块到底该干什么,要么就是对Ma ven模块依赖的传递性没吃透。结果呢?依赖冗余、版本冲突、构建效率下降,一个接一个冒出来。

所以这篇内容,重点梳理一下Ma ven多模块的配置思路和实操流程。
在动手配之前,先大致了解整体框架——配置过程其实就三大步:先确定项目需要哪些模块,再理清模块之间的依赖关系,最后按依赖关系配好pom文件就行。

第一步:确定项目的模块划分

模块怎么分?其实没有任何强制要求,更多是看项目本身的情况。下面是一般项目的常见划分思路:

  • test 集成测试模块:只放测试用例,不包含任何业务逻辑。
  • facade 对外服务接口模块(业务类项目一般较小,服务类项目比较常见):定义对外提供的接口、请求参数、返回结果等,作为一个独立的JAR包供其他项目依赖。
  • client 集成外部服务接口模块:功能跟facade对应,专门处理外部服务的依赖。
  • lang 基础公用模块:所有模块都会用的公共类,比如工具类、通用枚举等。
  • das 数据访问模块:封装DB层的代码,包括DO/DAO等。
  • service 领域核心服务模块:核心业务逻辑集中在这里。
  • web/biz 业务模块:处理具体的业务请求。如果业务比较复杂,还可以进一步拆分,比如web-userweb-order等。

按照这个思路,举个例子,模块划分可以这样:

  • ntopic-test 集成测试模块
  • ntopic 业务逻辑模块,包含SpringBoot启动类、Web模块、业务逻辑等
  • ntopic-servcie 领域核心服务
  • ntopic-client 外部服务集成
  • ntopic-das DB操作
  • ntopic-lang 公共模块

第二步:确定各个模块的依赖关系

Ma ven模块的依赖有个很重要的特性——传递性。举个例子:如果模块A依赖模块B,模块B又依赖模块C,那么模块A会自动依赖模块C。这就像数学里数值大小的传递性,A>BB>C,那A>C肯定成立。

结合这个特性,再看一下各个模块之间的依赖关系:

  • ntopic-test 集成测试模块:它包含了所有代码逻辑,所以处于最上层。
  • ntopic 业务模块:业务逻辑需要依赖service模块提供核心服务。
  • ntopic-service 核心服务模块:它依赖DB数据读写,还要引入外部服务。
  • ntopic-lang 公共逻辑模块:进一步依赖其他统一模块,比如commons模块等。

Ma ven多模块项目架构配置过程及说明

第三步:Ma ven多模块实操

多模块配置的核心在pom.xml文件里。每个pom.xml模块,都至少需要配置五个核心元素:

  • groupId:大分组,一般用公司域名,比如com.aliaba
  • artifactId:具体的JAR包名,比如sequence-jdbc / fastjson
  • versionJAR包版本,比如1.0.1 / 1.2.76。
  • packaging:模块打包方式,默认是jar,多模块的总模块或父模块用pom
  • name:模块名称,这个可选,但建议配上,方便识别。

总pom.xml文件

pom.xml负责配置整个项目的所有信息,包括模块列表、依赖的JAR包、仓库地址和打包方式等。

父模块是可选的,不一定非要有。比如ntopic-boot基于SpringBoot框架,所以它的父模块直接用了SpringBoot的。



    4.0.0
    
        org.springframework.boot
        spring-boot-starter-parent
        2.5.3
        
    
    ntopic
    ntopic-parent
    1.0.1
    pom
    ntopic-parent

接下来指定本项目包含的模块列表:

    
        ntopic-test
        ntopic
        ntopic-service
        ntopic-das
        ntopic-client
        ntopic-lang
    

依赖管理部分也很关键。在dependencyManagement里统一声明依赖,各个子模块直接用就行了,不必重复写版本号。

    
      
              
              
                  ntopic
                  ntopic-lang
                  ${ntopic.version}
              
              
                  ntopic
                  ntopic-client
                  ${ntopic.version}
              
        
        
        
            org.springframework.boot
            spring-boot-starter-jdbc
            ${springboot.boot.version}
        
        
        
            com.google.gua va
            gua va
            30.1.1-jre
        
        
        
    

此外,还需要配置额外的Ma ven仓库和打包方式:

    
        
            Gitee-obullxl
            https://gitee.com/obullxl/ma ven-repository/raw/sequence-jdbc
        
    
    
        
            
                org.springframework.boot
                spring-boot-ma ven-plugin
                ${springboot.boot.version}
            
        
    

子模块pom.xml文件

总模块配好之后,子模块的配置就简单多了。只需要配置三个信息块:父模块、四元素(artifactIdpackagingversionname)和依赖的其他子模块。依赖关系就按照第二步的梳理来配。



    4.0.0
    
        ntopic
        ntopic-parent
        1.0.1
    
    ntopic-service
    jar
    ${ntopic.version}
    ntopic-service
    
        
        
            ntopic
            ntopic-das
        
        
            ntopic
            ntopic-client
        
    

编译项目各个模块

配置完成之后,直接执行编译命令就可以了:

mvn compile

编译成功的话,会看到类似这样的输出:

[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO] 
[INFO] ntopic-parent ...................................... SUCCESS [  0.022 s]
[INFO] ntopic-lang ........................................ SUCCESS [  0.873 s]
[INFO] ntopic-das ......................................... SUCCESS [  0.121 s]
[INFO] ntopic-client ...................................... SUCCESS [  0.042 s]
[INFO] ntopic-service ..................................... SUCCESS [  0.055 s]
[INFO] ntopic ............................................. SUCCESS [  0.073 s]
[INFO] ntopic-test ........................................ SUCCESS [  0.114 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.094 s
[INFO] Finished at: 2023-12-15T19:44:56+09:00
[INFO] Final Memory: 35M/448M
[INFO] ------------------------------------------------------------------------

总结

以上就是Ma ven多模块架构的完整配置流程,从模块划分、依赖关系到实际配置,环环相扣。核心就是吃透依赖传递性,合理规划模块职责,避免重复引用和版本混乱。希望能提供一个清晰的参考。

来源:https://www.jb51.net/program/365435jwv.htm
上一篇Java多线程编程入门教程从基础到实现详解 下一篇Spring Boot Maven打包外部lib依赖方法
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
AWS RDS 数据库配置入门与基础操作指南
编程语言 · 2026-07-10

AWS RDS 数据库配置入门与基础操作指南

本文介绍了AWSRDS的基本概念与核心价值,即提供托管式关系数据库服务,简化运维。详细阐述了创建RDS实例的关键配置步骤,包括引擎选择、实例规格、存储与网络设置。最后,指导读者如何通过多种方式安全连接至数据库实例,并开始进行数据操作,为后续应用开发奠定基础。

PHP MVC中AJAX请求无法调用控制器方法的原因与解决方案
编程语言 · 2026-07-10

PHP MVC中AJAX请求无法调用控制器方法的原因与解决方案

PHPMVC中AJAX请求返回整页HTML的常见原因是控制器方法未正确输出响应或未终止执行,导致框架渲染视图。解决方法是在控制器中设置JSON响应头、输出数据后调用exit()明确终止,同时前端使用小写url和dataType: "json "。

Go语言手动构造rsa.PublicKey:正确初始化大整数模数N完整指南
编程语言 · 2026-07-10

Go语言手动构造rsa.PublicKey:正确初始化大整数模数N完整指南

手动构造RSA公钥时,模数N为*big Int类型,不能直接使用超长十进制字面量,需通过SetString或UnmarshalText方法解析字符串。公钥指数E可直接赋值,推荐65537。生产环境应使用rsa GenerateKey生成密钥对,避免手动构造引发的安全和格式错误。

Go语言实现HTTP定时轮询监控多URL响应时间与状态检测
编程语言 · 2026-07-10

Go语言实现HTTP定时轮询监控多URL响应时间与状态检测

使用Go语言实现HTTP定时轮询监控,通过按行分割与Tab解析URL列表,避免闭包陷阱和nil指针,每个URL启动独立ticker安全并发请求,并配置超时控制与资源关闭,确保响应时间与状态码准确检测。

Tkinter中Label标签在主循环动态更新的正确方法
编程语言 · 2026-07-10

Tkinter中Label标签在主循环动态更新的正确方法

在Tkinter中正确动态更新标签的方法:将标签组件的textvariable参数绑定到一个StringVar变量,然后通过调用该变量的 set()方法更新其值,界面会自动刷新。这样避免直接修改text属性或调用update()。此做法实现数据与界面的解耦,代码更简洁,响应更及时,避免手动同步的闪烁,推荐做法。