Maven 父子工程 SpringBoot 多模块

一、原始结构

复制代码
D:\SpringAI\SpringAI\
├── .idea\
├── .mvn\
├── src\                  ← 待删除
│   └── main\java\Main.java
├── target\               ← 待删除
├── .gitignore
└── pom.xml               ← 待重写

二、需要删除的东西

只删两个目录,其它都保留:

删除项 原因
src 父工程不写代码,只管依赖
target 编译产物,没用

.idea.mvn.gitignorepom.xml 保留

三、改造后的最终结构

复制代码
D:\SpringAI\SpringAI\
├── .idea\
├── .mvn\
├── .gitignore
├── pom.xml               ← 父工程(packaging=pom)
├── demo1\                ← 子模块 1(以后新建)
│   ├── src\main\java\...
│   └── pom.xml
├── demo2\                ← 子模块 2
│   └── ...
└── ...

四、完整的父 pom.xml(直接复制即可)

文件位置:SpringAI/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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>SpringAI</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>pom</packaging>

    <modules>
        <!-- 以后每新建一个子模块,就在这里加一行 -->
        <!-- <module>demo1</module> -->
    </modules>

    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

        <spring-boot.version>3.5.4</spring-boot.version>
        <spring-ai.version>1.1.4</spring-ai.version>
    </properties>

    <!--
    ============================================================
    【dependencyManagement】只声明版本,不真的引入。
      ▸ 子模块要用,仍要写 <dependency>,但不用写 <version>,自动继承此处版本。
      ▸ 适合放 BOM、第三方库版本号,统一版本管理。
      ▸ 子模块不写就不引入,灵活。
    ============================================================
    -->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.ai</groupId>
                <artifactId>spring-ai-bom</artifactId>
                <version>${spring-ai.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <!--
    ============================================================
    【dependencies】真的引入依赖,所有子模块强制继承(无法移除)。
      ▸ 适合放每个子模块都必用的基础库(如 web、test、lombok)。
      ▸ 子模块就算用不上也会被强制带上,慎放可选依赖。
      ▸ 与 dependencyManagement 区别:前者"强制带货",后者"按需点单"。
    ============================================================
    如需 webflux,注释下面的 web,并把 webflux 取消注释(二者互斥)
    ============================================================
    -->
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!--
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-webflux</artifactId>
        </dependency>
        -->

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!-- MyBatis 整合 Spring Boot -->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>3.0.4</version>
        </dependency>

        <!-- MySQL 8 驱动 -->
        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <scope>runtime</scope>
        </dependency>

        <!-- Lombok(编译期生成 getter/setter/构造器等,运行期不参与) -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
    </dependencies>

    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <version>${spring-boot.version}</version>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>

    <repositories>
        <repository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/milestone</url>
            <snapshots><enabled>false</enabled></snapshots>
        </repository>
    </repositories>
</project>

五、新建子模块的步骤

  1. IDEA 中右键父工程 SpringAINew → Module

  2. Spring Boot (或 Maven Archetype),Name 填 demo1

  3. Location 自动是 D:\SpringAI\SpringAI\demo1不要改

  4. 创建完后,回到父 SpringAI/pom.xml,在 <modules> 中加一行:

    复制代码
    <module>demo1</module>
  5. 子模块的 pom.xml 顶部要有:

    复制代码
    <parent>
        <groupId>org.example</groupId>
        <artifactId>SpringAI</artifactId>
        <version>1.0-SNAPSHOT</version>
        <relativePath>../pom.xml</relativePath>
    </parent>
  6. 子模块加依赖时只写 groupId + artifactId,不写 version------版本由父工程统一管理。

七、以后添加依赖

在父工程添加依赖依赖统一版本,子模块引入即可

相关推荐
两年半的个人练习生^_^2 小时前
每日一学:设计模式之原型模式
java·开发语言·设计模式·原型模式
qqty12172 小时前
springcloud springboot nacos版本对应
spring boot·spring·spring cloud
tumeng07112 小时前
Spring详解
java·后端·spring
深邃-2 小时前
【Web安全】-基础环境安装:虚拟机安装,JDK环境安装(1)
java·开发语言·计算机网络·安全·web安全·网络安全·安全架构
小雅痞2 小时前
[Java][Leetcode hard] 135. 分发糖果
java·算法·leetcode
q5431470872 小时前
基于Spring Boot 3 + Spring Security6 + JWT + Redis实现登录、token身份认证
spring boot·redis·spring
jwt7939279372 小时前
Spring之DataSource配置
java·后端·spring
逻辑驱动的ken2 小时前
Java高频面试场景题07
java·开发语言·面试·职场和发展·求职招聘·春招
slarymusic3 小时前
解决报错net.sf.jsqlparser.statement.select.SelectBody
java