IDEA使用Maven创建父与子多模块项目的图文教程

 更新时间:2025年03月05日 10:40:31   作者:pan_junbiao  
在 IntelliJ IDEA 中使用 Maven 创建父与子多模块项目是一个常见的开发实践,有助于更好地组织和管理代码,所以本文小编给大家介绍了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>
        <relativePath>../pom.xml</relativePath>
    </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>
                <!-- 注意:必须加上如下配置,否则打包会报错 -->
                <configuration>
                    <classifier>exec</classifier>
                </configuration>
            </plugin>
        </plugins>
    </build>
 
</project>

5、启动服务

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

启动成功。

以上就是IDEA使用Maven创建父与子多模块项目的图文教程的详细内容,更多关于IDEA Maven创建父与子项目的资料请关注脚本之家其它相关文章!

相关文章

  • Spring MVC使用jstl 标签c:forEach 遍历输出双层嵌套List的数据方式

    Spring MVC使用jstl 标签c:forEach 遍历输出双层嵌套List的数据方式

    这篇文章主要介绍了Spring MVC使用jstl 标签c:forEach 遍历输出双层嵌套List的数据方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • java通过注解翻译字典的实现示例

    java通过注解翻译字典的实现示例

    本文主要介绍了java通过注解翻译字典的实现示例,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-04-04
  • 盘点SpringBoot中@Async注解的遇到的坑点及解决办法

    盘点SpringBoot中@Async注解的遇到的坑点及解决办法

    SpringBoot是一个流行的Java开发框架,在异步编程方面,Spring Boot提供了@Async注解,它能够让方法异步执行,然而,在使用@Async注解时,有一些潜在的坑需要注意,本文将深入探讨Spring Boot中使用@Async注解时可能遇到的8大坑点,并提供相应的解决方案
    2024-03-03
  • 老生常谈Java中instanceof关键字的理解

    老生常谈Java中instanceof关键字的理解

    java 中的instanceof 运算符是用来在运行时指出对象是否是特定类的一个实例。这篇文章主要介绍了老生常谈Java中instanceof关键字的理解,需要的朋友可以参考下
    2018-10-10
  • eclipse/intellij idea 查看java源码和注释方法

    eclipse/intellij idea 查看java源码和注释方法

    下面小编就为大家带来一篇eclipse/intellij idea 查看java源码和注释方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • SparkSQL中的JSON内置函数全解析

    SparkSQL中的JSON内置函数全解析

    你是否曾经为处理JSON数据而头疼?SparkSQL为我们提供了强大的内置JSON函数,让JSON处理变得轻而易举,本文将带你深入了解这些函数,感兴趣的朋友一起看看吧
    2024-08-08
  • Java实现PDF转Word的示例代码(无水印无页数限制)

    Java实现PDF转Word的示例代码(无水印无页数限制)

    这篇文章主要为大家详细介绍了如何利用Java语言实现PDF转Word文件的效果,并可以无水印、无页数限制。文中的示例代码讲解详细,需要的可以参考一下
    2022-05-05
  • java-thymeleaf的使用方式

    java-thymeleaf的使用方式

    这篇文章主要介绍了java-thymeleaf的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • Java Web会话技术Session的简单使用

    Java Web会话技术Session的简单使用

    在请求需要传递的信息比较多,使用Cookie技术就会增大请求的难度。而Session可以存储对象、数组等信息,并且Session是存储到服务器端的,在客户端请求时只需要将session id一并携带给服务器端。本文将简单的介绍如何使用Session
    2021-05-05
  • Struts2 文件上传进度条的实现实例代码

    Struts2 文件上传进度条的实现实例代码

    本篇文章主要介绍了Struts2 文件上传进度条的实现实例代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05

最新评论