IDEA使用Maven创建父与子多模块项目

在 IntelliJ IDEA 中使用 Maven 创建父与子多模块项目是一个常见的开发实践,有助于更好地组织和管理代码。在多模块项目中,可以将公共的代码、资源或配置抽离到独立的模块中,然后在其他模块中直接引用。这样可以避免代码重复,提高代码的重用性。

父模块可以统一管理依赖的版本和配置,子模块则继承这些配置。这样不仅简化了依赖管理,还确保了项目中所有模块使用的依赖版本一致,减少了因版本不一致导致的冲突和错误。多模块项目允许将项目按照功能或业务进行分割,每个模块都有自己的职责和功能。这使得项目结构更加清晰易懂,方便开发者进行模块化管理。

1、创建父工程

(1)使用 IDEA 新建父工程。

(2)删除父工程下多余的文件和文件夹。

2、创建子模块

(1)右键父工程,选择“新建”,然后选择“新模块”。

 

(2)创建子模块。

分别创建3个子模块:

com-pjb-proudct:商品模块。

com-pjb-order:订单模块。

com-pjb-member:会员模块。

注意:子模块的组名(包名)必须与父工程的一致。

(3)继续创建其余的子模块

3、父工程的 Maven 配置

(1)设置父工程的包为 pom(必须)。

<!-- 设置父工程的包为 pom -->
<packaging>pom</packaging>

(2)关联子模块。

<!-- 关联子模块-->
<modules><module>com-pjb-proudct</module><module>com-pjb-order</module><module>com-pjb-member</module>
</modules>

(3)设置 <dependencyManagement> 节点。

Maven 中的 <dependencyManagement>节点,用于父工程POM中定义依赖的版本和配置,而不实际引入这些依赖。它提供了一种集中管理和控制项目中所有模块或子项目所使用的依赖项版本的方式。

通过 <dependencyManagement> 节点,可以在父POM中统一声明依赖项的版本,子模块在引用这些依赖时无需再显式指定版本号,从而确保所有子模块使用的都是同一版本的依赖。

在父 POM 的 <dependencyManagement> 部分,使用 <dependencies> 元素包裹一系列的 <dependency> 元素,每个 <dependency> 元素指定一个依赖项的 groupId、artifactId 和 version。

<properties><spring.boot.version>2.4.2</spring.boot.version><lombok.version>1.18.28</lombok.version>
</properties><!-- <dependencyManagement>节点:用于父工程POM中定义依赖的版本和配置,而不实际引入这些依赖-->
<dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>${spring.boot.version}</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId><version>${spring.boot.version}</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><version>${spring.boot.version}</version></dependency><!-- Lombok 依赖 --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>${lombok.version}</version></dependency></dependencies>
</dependencyManagement>

(4)完整的父工程 pom.xml 文件配置。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><!-- SpringBoot 的依赖--><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.4.2</version><relativePath/></parent><groupId>com.pjb</groupId><artifactId>MultiModule</artifactId><version>1.0.0</version><name>MultiModule</name><description>MultiModule</description><!-- 设置父工程的包为 pom --><packaging>pom</packaging><!-- 关联子模块--><modules><module>com-pjb-proudct</module><module>com-pjb-order</module><module>com-pjb-member</module></modules><properties><spring.boot.version>2.4.2</spring.boot.version><lombok.version>1.18.28</lombok.version></properties><!-- <dependencyManagement>节点:用于父工程POM中定义依赖的版本和配置,而不实际引入这些依赖--><dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>${spring.boot.version}</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId><version>${spring.boot.version}</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><version>${spring.boot.version}</version></dependency><!-- Lombok 依赖 --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>${lombok.version}</version></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

4、子模块的 Maven 配置

(1)<parent> 节点引用父工程的依赖。

<!-- 步骤1:不再直接使用SpringBoot依赖,而是引用父工程的依赖-->
<parent><groupId>com.pjb</groupId><artifactId>MultiModule</artifactId><version>1.0.0</version>
</parent>

(2)设置子模块的包为 jar(必须)。

<!-- 步骤2:设置子模块的包为 jar -->
<packaging>jar</packaging>

(3)完整的子模块 pom.xml 文件配置。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><!-- 步骤1:不再直接使用SpringBoot依赖,而是引用父工程的依赖--><parent><groupId>com.pjb</groupId><artifactId>MultiModule</artifactId><version>1.0.0</version></parent><!-- 步骤2:设置子模块的包为 jar--><packaging>jar</packaging><!-- 注意:groupId 必须与父工程一致 --><groupId>com.pjb</groupId><artifactId>Proudct</artifactId><version>1.0.0</version><name>com-pjb-proudct</name><description>com-pjb-proudct</description><!-- 子模块在引用这些依赖时无需再显式指定版本号,从而确保所有子模块使用的都是父工程同一版本的依赖 --><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!-- Lombok 依赖 --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

5、启动服务

启动子模块,测试运行结果。

启动成功。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1559804.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

第十一章:规划过程组 (11.1制定项目管理计划--11.5创建WBS)

11.1 制定项目管理计划 • 项目管理计划可以是概括或详细的&#xff0c;每个组成部分的详细程度取决于具体项目的要求 • 项目管理计划应基准化&#xff0c;即至少应规定项目的范围、时间和成本方面的基准以便据此考核项目执行情况和管理项目绩效。 • 在确定基准之前&#xf…

汽车胶黏剂市场研究:预计2030年全球市场规模将达到67.4亿美元

汽车胶黏剂是指专门用于汽车制造和维修过程中&#xff0c;用于粘接、密封和固定各种汽车部件的化学材料。它们在汽车行业中扮演着关键角色&#xff0c;广泛应用于车身、内饰、玻璃、电子元件和其他组件的粘接与密封。汽车胶黏剂旨在提高汽车的结构强度、耐用性、密封性以及舒适…

Spark第一天

MapReduce过程复习 Spark由五部分组成 RDD五大特征 1、 Spark -- 代替MapReduce <<<<< scala是单机的&#xff0c;spark是分布式的。>>>>> 开源的分布式计算引擎 可以快速做计算 -- 因为可以利用内存来做一些计算 (1) 分为5个库(模块) : 1、…

打不死的超强生命力

水熊虫是你可能听说过的小生物&#xff0c;它们能够在极端环境中生存&#xff0c;堪称地球上的“超强幸存者”。数十年来&#xff0c;科学家们试图通过各种极端实验杀死它们&#xff0c;但无论是把它们以900米/秒的速度发射&#xff0c;还是将它们暴露在宇宙辐射下&#xff0c;…

Linux系统本地搭建轻量级文件共享系统PicoShare远程连接实战

前言 本篇文章介绍&#xff0c;如何在Linux系统本地部署轻量级文件共享系统PicoShare&#xff0c;并结合Cpolar内网穿透实现公网环境远程传输文件至本地局域网内文件共享系统。 PicoShare 是一个由 Go 开发的轻量级开源共享文件系统&#xff0c;它没有文件限制&#xff0c;允…

CDGA|数据治理:企业创新发展的强劲引擎

在当今这个数据驱动的时代&#xff0c;企业之间的竞争已经悄然转变为对数据资源的争夺与利用能力的比拼。数据&#xff0c;作为新的生产要素&#xff0c;正以前所未有的速度改变着企业的运营模式、决策方式乃至整个商业生态。而数据治理&#xff0c;作为确保数据质量、安全性、…

FPGA上板调试方式总结----VIO/ILA

在Vivado中&#xff0c;VIO&#xff08;Virtual Input/Output&#xff09;是一种用于调试和测试FPGA设计的IP核&#xff0c;它允许设计者通过JTAG接口实时读取和写入FPGA内部的寄存器&#xff0c;从而检查设计的运行状态并修改其行为。VIO IP核提供了一个简单易用的接口&#x…

二叉树系列(遍历/dfs/bfs)10.10

一、二叉树的右视图(遍历) 给定一个二叉树的 根节点 root&#xff0c;想象自己站在它的右侧&#xff0c;按照从顶部到底部的顺序&#xff0c;返回从右侧所能看到的节点值。 &#xff08;如果右子树为空的话&#xff0c;那么右视图中看到的就是左子树的节点&#xff09; bfs层…

IPguard与Ping32 DLP能力对比,保护企业数据的最佳选择

在信息安全的背景下&#xff0c;数据丢失防护&#xff08;DLP&#xff09;解决方案已成为企业不可或缺的一部分。IPguard和Ping32是市场上两款功能强大的DLP产品。本文将对它们的DLP能力进行详细对比&#xff0c;帮助企业找到最适合自己的数据保护工具。 Ping32的独特之处 Pin…

java复制查询数组-cnblog

java数组 复制数组 copyOf(待复制数组,复制后新数组的长度) 如果复制后数组的长度&#xff0c;长于原来数组&#xff0c;多出来的元素会被补0&#xff0c;如果新数组元素少会从第一个元素&#xff0c;取到指定元素长度 package nb;import java.util.Arrays;public class co…

2024年,有多少程序员被迫转行?真是惨烈啊!

知乎有个很火热的帖子&#xff0c;很多人在讨论今年有多少程序员在被迫转行&#xff0c;原来今年的程序员这么难。 有个老哥说自己干了8年前端程序员&#xff0c;今年被裁之后&#xff0c;薪资从30K降到25K还是没找到工作&#xff0c;现在只能转行去卖保险。 还有一个38岁的老哥…

深度解析|生成式人工智能大模型备案全流程

一、大模型备案的含义 根据《生成式人工智能服务管理暂行办法》第十七条 提供具有舆论属性或者社会动员能力的生成式人工智能服务的&#xff0c;应当按照国家有关规定开展安全评估。这里所说的按照国家有关规定开展安全评估&#xff0c;其实就是生成式人工智能服务备案&#x…

Python_网络编程(IP 端口 协议)

网络编程&#xff1a; 互联网时代&#xff0c;现在基本上所有的程序都是网络程序&#xff0c;很少有单机版的程序了。网络编程就是如何在程序中实现两台计算机的通信。Python语言中&#xff0c;提供了大量的内置模块和第三方模块用于支持各种网络访问&#xff0c;而且Python语言…

JAVA毕业设计187—基于Java+Springboot+vue3的电动车销售管理系统(源代码+数据库)

毕设所有选题&#xff1a; https://blog.csdn.net/2303_76227485/article/details/131104075 基于JavaSpringbootvue3的电动车销售管理系统(源代码数据库)187 一、系统介绍 本项目前后端分离(可以改为ssm版本)&#xff0c;分为用户、管理员两种角色 1、用户&#xff1a; 注…

不用PS!patchwork快速解决多子图组合问题~~

如果现在你还是将自己制作的图表放在PS或者PPT中进行随意组合的化&#xff0c;那么这篇文章你就得好好看看了&#xff0c;今天小编就给大家安利一个超强的突变自由组合包-patchwork&#xff0c;让你轻松实现多图的自由组合。 更多详细的数据可视化教程&#xff0c;可订阅我们的…

科研绘图系列:R语言绘制中国地理地图

文章目录 介绍加载R包导入数据图a图b图c图d系统信息介绍 文章提供了绘制图a,图b和图d的数据和代码。该图展示了不同省份的物种分布情况。 加载R包 library(geojsonsf) library(sf) library(ggplot2) library(RColorBrewer) library(ggspatial) library(</

Springboot网上书城小程序—计算机毕业设计源码38707

目 录 摘要 1 绪论 1.1 研究背景及意义 1.2国内外研究现状 1.3系统开发的内容 1.4论文结构与章节安排 1.5小程序框架以及目录结构介绍 2 网上书城小程序系统分析 2.1 可行性分析 2.1.1 技术可行性分析 2.1.2 经济可行性分析 2.1.3 操作可行性分析 2.2 系统功能分析…

PowerJob做定时任务调度

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、区别对比二、使用步骤1. 定时任务类型2.PowerJob搭建与部署 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; PowerJob是基于java开…

Android SELinux——安全策略(三)

SELinux 通过严格的访问控制机制增强了 Linux 系统的安全性。它通过标签和安全策略来控制进程和文件的访问权限&#xff0c;从而保护系统免受未经授权的访问和攻击。 一、策略介绍 1、主要组件 安全标签&#xff08;Security Labels&#xff09;&#xff1a;每个文件、目录、…

Nginx中,413 Request Entity Too Large错误

背景 在Nginx中&#xff0c;413 Request Entity Too Large错误通常发生在尝试上传或发送超过Nginx配置文件中的client_max_body_size限制的文件时。这个错误意味着请求的正文大小超过了Nginx允许的最大值。 解决这个问题的方法是在Nginx配置文件中增加client_max_body_size的值…