tulip notes
首页
  • 学习笔记

    • 《Vue》
  • 踩坑日记

    • JavaScript
  • MQ
  • Nginx
  • IdentityServer
  • Redis
  • Linux
  • Java
  • SpringBoot
  • SpringCloud
  • MySql
  • docker
  • 算法与设计模式
  • 踩坑与提升
  • Git
  • GitHub技巧
  • Mac
  • 网络
  • 项目构建合集
  • 一些技巧
  • 面试
  • 一些杂货
  • 友情链接
  • 项目发布
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Star-Lord

希望一天成为大师的学徒
首页
  • 学习笔记

    • 《Vue》
  • 踩坑日记

    • JavaScript
  • MQ
  • Nginx
  • IdentityServer
  • Redis
  • Linux
  • Java
  • SpringBoot
  • SpringCloud
  • MySql
  • docker
  • 算法与设计模式
  • 踩坑与提升
  • Git
  • GitHub技巧
  • Mac
  • 网络
  • 项目构建合集
  • 一些技巧
  • 面试
  • 一些杂货
  • 友情链接
  • 项目发布
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 探索SpringBoot

  • 常用功能实现

  • Security认证授权

  • 扩展

  • 实战与注意事项

  • 其它

    • IDEA_SpringBoot搭建多模块项目
      • 采用多module开发的理由
      • 步骤
        • 创建父模块
        • 添加子模块
        • 重复上述步骤以创建更多子模块
        • 调整和测试
      • 一些问题
        • pom文件中的标签dependencyManagement
        • packaging类型设置为pom
    • 解决IDEA创建SpringBoot项目没有Java8
    • 运行jar包相关
    • 类命名的一些建议
  • 《SpringBoot》笔记
  • 其它
EffectTang
2024-05-02
目录

IDEA_SpringBoot搭建多模块项目

# SpringBoot搭建多模块项目

# 采用多module开发的理由

Spring Boot项目采用多module开发的理由主要体现在以下几个方面:

  1. 模块化与解耦:多module结构允许将大型项目拆分为多个小型、独立的模块,每个模块负责特定的功能或服务。这样不仅降低了模块间的耦合度,也使得项目更加易于理解和维护。团队成员可以专注于各自负责的模块,提高开发效率。
  2. 代码复用:通过将公共功能抽象到单独的module(如基础服务、工具类、配置模块等),可以在不同模块间共享这些基础服务,减少代码重复,提高代码质量。
  3. 便于测试:小而专一的模块更容易编写单元测试和集成测试,有助于提高测试覆盖率,确保软件质量。
  4. 并行开发:多module结构支持团队成员并行开发不同模块,减少代码冲突,加快开发进度。
  5. 灵活的构建与部署:每个module可以独立构建和部署,对于微服务架构而言,这尤为重要。即使在单体应用中,也能够只重新构建和部署修改过的模块,而不是整个项目。
  6. 利于迁移至微服务架构:随着项目发展,可能需要将部分服务拆分成微服务。采用多module设计的项目,更容易逐步迁移到微服务架构,因为每个模块天然具有一定的独立性。
  7. 优化资源管理:通过模块化,可以更精细地控制资源分配,例如,不同的module可以有不同的依赖库版本控制,有助于减少资源浪费和潜在的冲突。
  8. 提高开发环境一致性:使用父POM统一管理依赖版本和构建配置,保证了所有模块开发环境的一致性,减少因环境差异导致的问题。

综上所述,Spring Boot项目采用多module开发是为了提升开发效率、代码质量、可维护性和灵活性,同时为未来可能的架构调整和技术演进奠定良好基础。

# 步骤

在IntelliJ IDEA中创建Spring Boot项目的多模块步骤大致如下:

# 创建父模块

  1. 新建项目:
    • 打开IntelliJ IDEA,点击File > New > Project。
    • 选择Spring Initializr,点击Next。
    • 配置项目的基本信息(Group, Artifact, Name等),选择你需要的Spring Boot版本。
    • 在Dependencies中,你可以选择添加一些基础的Spring Boot依赖,比如Spring Web,但这不是必须的,因为父模块通常不包含应用代码。
    • 点击Next,然后Finish创建项目。
  2. 转换为父POM:
    • 在刚创建的项目中,打开pom.xml,添加<modules>标签,并在其中列出你计划创建的子模块名称,如<module>module1</module>。
    • 修改packaging类型为pom,因为父模块通常不打包为可执行的jar或war。
    • 可以在这里定义共同的依赖管理、属性配置等。

# 添加子模块

  1. 新建子模块:
    • 在父模块的项目目录上右键,选择New > Module。
    • 选择Maven,点击Next。
    • 填写子模块的信息(GroupId会自动继承,ArtifactId和Version需要定义),点击Next。
    • 选择必要的Spring Boot Starter依赖,例如Spring Web如果你正在创建一个Web服务模块,然后点击Finish。
  2. 配置子模块:
    • 在生成的子模块pom.xml中,确保它指定了正确的父模块坐标(groupId, artifactId, version)。
    • 根据需要添加或调整子模块的依赖。
    • 如果是Spring Boot应用模块,确保删除或注释掉不需要的模板代码,比如application.properties/yaml的示例内容,以及不必要的启动类,除非该模块需要作为独立的应用运行。

# 重复上述步骤以创建更多子模块

按照上述过程,你可以为每个需要的模块重复步骤,创建并配置它们。

# 调整和测试

  • 确保所有子模块的依赖和配置正确无误。
  • 在IDEA中,你可以直接运行或调试任一子模块,只要该模块是可执行的Spring Boot应用。
  • 使用Maven的生命周期命令(如clean install)在命令行或IDE中构建整个项目,验证所有模块是否能够成功构建且相互依赖正确。

通过这种方式,你就可以在IntelliJ IDEA中成功创建并管理一个Spring Boot的多模块项目。

# 一些问题

# pom文件中的标签dependencyManagement

在Maven的父模块的pom.xml文件中,<dependencyManagement>标签扮演着关键的依赖版本控制角色。这个标签的主要作用包括:

  1. 版本统一管理:它允许你集中管理所有子模块中所依赖的jar包版本。当你在一个大型项目中有多个子模块,并且这些子模块间共享很多依赖时,<dependencyManagement>可以确保所有子模块使用的依赖版本一致,避免因版本不一致导致的编译或运行时错误。
  2. 简化子模块配置:在父模块中声明了<dependencyManagement>之后,子模块在引入这些依赖时,不需要指定版本号。Maven会自动使用父模块中定义的版本。这样,如果需要升级某个依赖的版本,只需在父模块中更改一次,所有依赖该组件的子模块都会自动继承新的版本,大大减少了维护成本。
  3. 不自动引入依赖:需要注意的是,<dependencyManagement>仅声明依赖及其版本,并不实际引入这些依赖到项目中。子模块需要在自己的<dependencies>标签内声明需要的依赖(只需groupId和artifactId,版本号可省略),这样才能真正将依赖纳入构建过程。

总结以下,<dependencyManagement>标签主要是为子模块服务的。它在父模块中定义了一套依赖版本的规则,子模块可以遵循这些规则,无需显式指定每个依赖的版本号,从而实现依赖版本的集中管理和控制。这样一来,不仅简化了子模块的POM配置,还保证了整个项目中依赖版本的一致性,提升了项目维护的效率和质量。

# packaging类型设置为pom

在Maven的父模块中,将packaging类型设置为pom的原因主要包括以下几点:

  1. 避免生成不必要的工件:父模块的主要目的是作为一个容器来持有共享的配置信息(如依赖管理、插件配置、属性定义等),以及组织和协调子模块。由于它本身不包含用于构建可执行应用程序或库的具体代码,因此不需要被打包成jar、war等工件。
  2. 明确模块角色:将packaging设为pom是一种约定,表明该模块是一个纯管理模块,不包含生产代码。这有助于开发者快速识别项目结构中的父模块。
  3. 配置集中化:父模块通过pom.xml集中管理依赖、构建配置等,而不需要包含实际的源代码或资源文件。因此,它不需要像常规的jar或war模块那样进行编译、测试和打包。
  4. Maven机制要求:对于那些旨在作为其他模块父级的项目,Maven要求其packaging类型必须为pom。这样做的目的是为了正确解析和应用父模块中的配置到子模块中,特别是依赖管理和构建生命周期的配置。

总结来说,将父模块的packaging类型设置为pom,是为了区分其与包含具体应用或库代码的模块,并集中管理整个项目或模块集合的配置,确保构建过程的一致性和高效性。

上次更新: 2025/04/23, 16:23:16
实现微信支付功能
解决IDEA创建SpringBoot项目没有Java8

← 实现微信支付功能 解决IDEA创建SpringBoot项目没有Java8→

最近更新
01
面向切面跟自定义注解的结合
05-22
02
时间跟其他数据的序列化
05-19
03
数据加密与安全
05-17
更多文章>
Theme by Vdoing | Copyright © 2023-2025 EffectTang
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式