Spring Boot多模块项目的创建和配置(Maven工程多模块)

这篇具有很好参考价值的文章主要介绍了Spring Boot多模块项目的创建和配置(Maven工程多模块)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在进行分布式系统开发时,我们通常会创建多个模块的工程项目。即每一个功能就是一个Spring Boot工程,作为一个个模块,然后这些模块都会有一个父模块,父模块通常没有代码只有一个pom.xml

今天就来分享一下Spring Boot如何创建一个多模块项目,以创建一个两个子模块的工程为例。

1,创建父模块

在IDEA中,创建一个Spring Boot项目,但是不勾选任何依赖:

springboot新建module,java,spring boot,maven,java

springboot新建module,java,spring boot,maven,java

创建好之后,将父模块中除了pom.xml文件之外的全部文件删除:

springboot新建module,java,spring boot,maven,java

因为父模块只是做一个模块和依赖管理的作用,因此不需要代码。

然后修改这个父模块的pom.xml文件,首先把<dependencies>节点、<build>节点和<properties>全部删除:

springboot新建module,java,spring boot,maven,java

然后修改版本号为自己定义的(方便后续子模块指定父模块):

springboot新建module,java,spring boot,maven,java

然后修改父模块打包方式为pom,在其中加入如下语句即可:

xml复制代码<packaging>pom</packaging>

springboot新建module,java,spring boot,maven,java

好的,到这里父模块修改就完成了!

2,创建子模块并继承父模块

在左边项目树中父模块位置右键新建Spring Boot工程:

springboot新建module,java,spring boot,maven,java

springboot新建module,java,spring boot,maven,java

springboot新建module,java,spring boot,maven,java

然后把子模块不需要的文件也删掉(只留pom.xmlsrc文件夹):

springboot新建module,java,spring boot,maven,java

修改该子模块的pom.xml文件,首先把子模块<parent>中的工件坐标改成和上述父模块一致:

springboot新建module,java,spring boot,maven,java

springboot新建module,java,spring boot,maven,java

然后删除子模块的<groupId>节点,因为通常子模块继承父模块,子模块的组id是和父模块的一致的:

springboot新建module,java,spring boot,maven,java

ok,到此子模块创建并配置完成!此时这个子模块(工件名module-one)就继承了刚刚的父模块。

然后以这个步骤再创建一个子模块module-two

springboot新建module,java,spring boot,maven,java

最后整个工程就创建完成了!总共两个子模块。

3,在父模块中指定子模块

回到父模块的pom.xml文件,添加<modules>节点,在其中加入<module>节点以指定子模块:

springboot新建module,java,spring boot,maven,java

需要注意的是,<module>节点中的内容是子模块工程的文件夹名!所以通常规范起见子模块工程的文件夹名通常和它的组件名一致。

springboot新建module,java,spring boot,maven,java

然后在父模块文件夹中执行mvn clean package试试:

springboot新建module,java,spring boot,maven,java

可以看见构建打包成功,以及每个模块的构建时间。

到此,多模块项目就创建完成了!

4,子模块之间的互相引用

在多模块项目中,子模块的互相引用也很方便。

比如说上述module-one要调用module-two中的类,就直接把module-two的工件坐标加入到module-onepom.xml的依赖部分即可!

springboot新建module,java,spring boot,maven,java

更新一下Maven工程,就可以在module-one中调用module-two的类了!

不过这个时候运行工程是没有任何问题的,但是打包会出错:虽然module-one依赖了module-two,但是仍然会在打包module-one的时候,提示找不到module-two中的类。

springboot新建module,java,spring boot,maven,java

这是由于Spring Boot打包的模式问题,我们打开被依赖模块module-two的pom.xml文件找到最下面<build>节点中,在spring-boot-maven-plugin插件部分中加入下面配置:

xml复制代码<classifier>exec</classifier>

最终如下:

springboot新建module,java,spring boot,maven,java

这个时候对父模块打包,就成功了!

springboot新建module,java,spring boot,maven,java

5,再看parent和modules标签

在上述无论是子模块继承父模块还是父模块中声明子模块,主要就是用到了parent标签和modules标签。那么这里有一个疑问了:既然子项目使用了parent指定父项目,那父项目中为什么还需使用modules指定子项目?这么做是否有些冗余?

事实上,这两个标签不仅仅是指定关系,还有着其它不同的作用。

(1) parent标签

parent标签就是用于声明该子模块的父模块了!也就是说,一个子模块要继承父模块,只需在parent中声明父模块的工件坐标即可。

当多个子模块继承了同一个父模块时:

  • 它们都会继承父模块中的依赖、插件、属性等等
  • 这些子模块之间也可以相互引用

在上述例子中,我们的子模块文件夹和父模块pom.xml在同一目录下,如果不在同一目录呢?那还需要在子模块的parent中使用relativePath来指定父模块的pom.xml的相对路径。

例如现在父项目的pom.xml文件不在子项目的上一级目录中,而是在子项目的上两级目录中,你可以将relativePath设置为../../pom.xml如下:

xml复制代码<parent>
	<groupId>com.gitee.swsk33</groupId>
	<artifactId>total-module</artifactId>
	<version>1.0.0</version>
	<!-- 指定父项目pom.xml位置 -->
	<relativePath>../../pom.xml</relativePath>
</parent>

注意,relativePath中指定的是相对路径,并且是父模块pom.xml相对于该子模块pom.xml文件的路径

(2) modules标签

当你现在需要构建父项目,比如在父项目的根目录下执行构建命令(如mvn clean install)时,所有继承了该父项目的子模块都会被构建吗?显然不是的。

只有声明在父项目的modules中的子模块,才会被构建。

想必现在大家知道了两者的区别了,parent声明继承,主要是继承属性、依赖等等父项目的属性,而父项目中的modules是指定哪些子模块会随着该父模块一起被构建。

所以如果你的项目中有的用于测试的子项目需要继承父项目,但是又不希望这些用于测试的模块被构建,你就可以不在父项目中的modules中声明它们。

6,依赖管理

多模块项目中模块变多了,依赖管理不当也会导致很多莫名其妙的问题。但是如果对每个模块分别管理依赖及其版本,会相当麻烦。

(1) 共用的依赖

假设上述module-onemodule-two都需要依赖fastjson2,我们平常并不会依次在module-onemodule-two中分别单独加入其依赖,而是直接在父模块pom.xml中指定,和平时一样,在父模块的pom.xmldependencis节点中加入即可:

springboot新建module,java,spring boot,maven,java

这样,子模块中即使是不加入fastjson2依赖,也可以使用这个库了!因为子模块除了可以使用自己的依赖之外,还会向上查找父模块的依赖,也就是说,父模块的依赖是向下继承的,因此对于所有模块都要使用的依赖,我们可以写在父模块中。

所以,两个模块都依赖于Spring Web话,也可以将两个模块的Spring Web依赖移至父模块。

所以说父模块和子模块中,依赖也有着继承的关系!事实上,父模块的properties也是向下继承的。

(2) 依赖版本管理

假如现在module-one依赖于okhttps4.0.0版本,而module-two依赖于commons-io2.11.0版本,显然这时我们不适合再在父模块中加入了,还是各自加入对应依赖。

springboot新建module,java,spring boot,maven,java

目前因为只有两个模块,这么做看起来很合理。但是假设现在又多了module-threemodule-four等等,它们也是分别依赖于okhttpscommons-io,那么我们又要分别在这两个模块中分别单独加入依赖。

摸块 依赖
module-onemodule-three okhttps
module-twomodule-four commons-io

可能一开始没有问题,但是后面模块依赖版本需要更新,但是一个个地更新难免会有疏漏,导致部分模块虽然依赖一样但是版本不一致,最后整个系统也出现了莫名其妙地错误,还难以排查。

就假设后面你把module-oneokhttps更新到了4.0.1版本,但是module-threeokhttps仍然是4.0.0版本,这样整个系统就可能出现问题甚至无法启动。

尤其是模块变成十几个甚至上百个了,一个个地手动修改是几乎不可能的,要如何让每个模块使用的依赖版本统一呢?

这时,我们就要借助dependencyManagement标签了!

dependencyManagement用于管理依赖的版本,我们在父模块的pom.xml加入这个标签:

xml复制代码<dependencyManagement>
   <dependencies>
      <dependency>
         <groupId>cn.zhxu</groupId>
         <artifactId>okhttps</artifactId>
         <version>4.0.0</version>
      </dependency>

      <dependency>
         <groupId>commons-io</groupId>
         <artifactId>commons-io</artifactId>
         <version>2.11.0</version>
      </dependency>
   </dependencies>
</dependencyManagement>

然后,在子模块中,就可以把对应的依赖版本去掉了!

springboot新建module,java,spring boot,maven,java

可见这里,子模块中只需要引入对应依赖,而不需要指定版本了!因为子模块会向上查找父模块中dependencyManagement标签中对应依赖的版本

这样,就起到了统一管理版本的作用,只需要在父模块的dependencyManagement中修改对应依赖版本,子模块中对应依赖都会相应地使用这个版本。

dependencyManagement的注意事项:

  • dependencyManagement仅用于管理版本,而不会为自己以及子模块导入依赖,因此在dependencyManagement中声明依赖后,对应的子模块仍然需要在dependencies中加入依赖
  • pom.xmldependencyManagementdependencies同级,并且dependencyManagement中也需要有一个dependencies
  • dependencyManagement不仅可以管理子模块的依赖版本,也可以管理自身的依赖版本
  • 若不想让某个子模块使用父模块dependencyManagement的版本,那就在这个子模块的dependencies中声明对应版本

(3) 总结

总而言之,对于所有子模块都共用的依赖,我们只需在父模块的dependencies中引入这个依赖即可,而不需要再在子模块pom.xml中引入。

而对于不是所有子模块都需要的依赖,而是部分子模块需要的,又要统一版本管理,这时除了在需要这个依赖的子模块中引入依赖之外,还需要在父模块中的dependencyManagement声明这个依赖及其版本,这时,可以去掉子模块中对应依赖的版本号,使其遵循父模块中声明的版本。

示例仓库地址:文章来源地址https://www.toymoban.com/news/detail-655279.html

  • 简单多模块项目
  • 统一依赖管理的多模块项目

到了这里,关于Spring Boot多模块项目的创建和配置(Maven工程多模块)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • spring boot3单模块项目工程搭建-下(个人开发模板)

    ⛰️个人主页:     蒾酒 🔥系列专栏 :《spring boot实战》 目录 写在前面 上文衔接 常用依赖介绍以及整合 web组件 测试组件 样板代码生成 数据库连接器 常用工具包 面向切面编程 ORM框架 数据连接池 接口测试、文档导出 缓存中间件 参数校验 认证鉴权 基础功能完善 跨域问

    2024年04月28日
    浏览(27)
  • Java 版 spring cloud + spring boot 工程系统管理 工程项目管理系统源码 工程项目各模块及其功能点清单

           工程项目各模块及其功能点清单 一、系统管理     1、数据字典:实现对数据字典标签的增删改查操作     2、编码管理:实现对系统编码的增删改查操作     3、用户管理:管理和查看用户角色     4、菜单管理:实现对系统菜单的增删改查操作     5、角色管理:

    2024年02月14日
    浏览(39)
  • SpringBoot 插件 spring-boot-maven-plugin 原理,以及SpringBoo工程部署的 jar 包瘦身实战

    我们直接使用 maven package (maven自带的package打包功能),打包Jar包的时候,不会将该项目所依赖的Jar包一起打进去,在使用 java -jar 命令启动项目时会报错,项目无法正常启动。这个时候,我们就可以考虑引用 spring-boot-maven-plugin 插件来为项目打Jar包。 maven项目的pom.xml中,添

    2024年02月06日
    浏览(35)
  • 2. 使用IDEA创建Spring Boot Hello项目并管理依赖——Maven入门指南

    前言:本文将介绍如何使用IDEA创建一个Spring Boot Hello项目,并通过Maven来管理项目的依赖。我们从项目的创建到代码的编写,再到项目的构建和运行,一步步演示了整个过程。 🚀 作者简介:作为某云服务提供商的后端开发人员,我将在这里与大家简要分享一些实用的开发小

    2024年02月10日
    浏览(42)
  • Java版企业工程项目管理系统源码+java版本+项目模块功能清单+spring cloud +spring boot

          工程项目各模块及其功能点清单 一、系统管理     1、数据字典:实现对数据字典标签的增删改查操作     2、编码管理:实现对系统编码的增删改查操作     3、用户管理:管理和查看用户角色     4、菜单管理:实现对系统菜单的增删改查操作     5、角色管理:

    2024年02月16日
    浏览(34)
  • 芋道SpringBoot配置Maven、创建SpringBoot项目、创建Web接口、读取配置信息

    🌹作者主页:青花锁 🌹简介:Java领域优质创作者🏆、Java微服务架构公号作者😄 🌹简历模板、学习资料、面试题库、技术互助 🌹文末获取联系方式 📝 第一章 芋道 Spring Boot 快速入门 芋道 SpringBoot是一款国产的SpringCloud微服务框架,包括Outh2.0、微服务网关、微服务注册中

    2024年04月23日
    浏览(26)
  • Visual Studio Code配置开发Maven项目、Spring Boot项目

    ctrl+shift+p打开搜索setting.json,这个setting.json配置属于全局配置 配置全局的Java与Maven信息 可以在当前项目的.vscode文件夹中,编辑或者创建settings.json,进行Java、Maven配置以此覆盖全局配置。 截至目前,新版本VSCode的Java扩展需要Java 17或更新的版本 如果想使用低版本的JDK,则需

    2024年02月03日
    浏览(37)
  • IDEA创建spring boot项目无法加载出maven里的pom.xml,而是settings.gradle

    在创建的maven项目里找不到pom.xml文件而是settings.gradle,如下图所示: 原因和解决方法: 是因为在创建Springboot项目的时候type里选的是Gradle,gradle和maven又不一样,换成maven就行了,具体操作如下图所示: 在用idea创建maven项目时,在Project Metadata界面Type选项下唯有Maven和Maven PO

    2024年02月09日
    浏览(37)
  • 【Spring Boot学习一】创建项目 && Spring Boot的配置文件

    目录 一、安装插件 二、创建Spring Boot项目 1、创建项目 1.1 使用IDEA创建  1.2 网页版本创建 2、项目目录介绍与运行 三、Sping Boot的配置文件(重点) 🌷1、.properties配置文件 (1)基础语法:Key = value (2)读取配置⽂件中的内容,@Value 注解使⽤“${}”的格式读取; 🌷2、.y

    2024年02月16日
    浏览(29)
  • 使用Maven父工程构建spring boot子工程

    注意:子工程引入springboot相关依赖之后子工程才能被解析为springboot模块

    2024年02月11日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包