You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot多模块项目:用Maven构建可执行单Jar包及示例POM

Spring Boot多模块项目构建可执行单Jar包方案

Spring Boot的可执行Jar有特殊目录结构,Maven Assembly插件无法正确适配这种结构,推荐使用官方的spring-boot-maven-plugin实现多模块项目的单可执行Jar打包。以下是完整的POM示例:

项目结构

my-spring-boot-app/
├── pom.xml (父项目)
├── app-core/
│   └── pom.xml
└── app-web/
    └── pom.xml

父项目POM (my-spring-boot-app/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>

    <groupId>com.example</groupId>
    <artifactId>my-spring-boot-app</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>pom</packaging>
    <name>My Spring Boot App (Parent)</name>
    <description>Parent project for multi-module Spring Boot application</description>

    <modules>
        <module>app-core</module>
        <module>app-web</module>
    </modules>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.2.0</version>
        <relativePath/>
    </parent>

    <properties>
        <java.version>17</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.example</groupId>
                <artifactId>app-core</artifactId>
                <version>${project.version}</version>
            </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>
        </dependencies>
    </dependencyManagement>
</project>

核心模块POM (my-spring-boot-app/app-core/pom.xml)

该模块为普通Jar模块,存放业务逻辑、工具类等:

<?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">
    <parent>
        <groupId>com.example</groupId>
        <artifactId>my-spring-boot-app</artifactId>
        <version>1.0.0-SNAPSHOT</version>
    </parent>

    <modelVersion>4.0.0</modelVersion>
    <artifactId>app-core</artifactId>
    <name>App Core Module</name>
    <description>Core business logic module</description>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
    </dependencies>
</project>

Web模块POM (my-spring-boot-app/app-web/pom.xml)

该模块作为Spring Boot启动模块,负责打包成可执行Jar,依赖核心模块:

<?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">
    <parent>
        <groupId>com.example</groupId>
        <artifactId>my-spring-boot-app</artifactId>
        <version>1.0.0-SNAPSHOT</version>
    </parent>

    <modelVersion>4.0.0</modelVersion>
    <artifactId>app-web</artifactId>
    <name>App Web Module</name>
    <description>Web entry module with executable Jar</description>
    <packaging>jar</packaging>

    <dependencies>
        <dependency>
            <groupId>com.example</groupId>
            <artifactId>app-core</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>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <mainClass>com.example.appweb.Application</mainClass>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

打包与运行

  1. 在父项目根目录执行打包命令:
    mvn clean package
    
  2. 打包完成后,可执行Jar位于app-web/target目录下,文件名类似app-web-1.0.0-SNAPSHOT.jar
  3. 运行Jar包:
    java -jar app-web/target/app-web-1.0.0-SNAPSHOT.jar
    

关键说明

  • spring-boot-maven-plugin的repackage目标会自动将所有依赖(包括子模块的类文件)打包到可执行Jar中,同时维护Spring Boot所需的目录结构
  • 仅启动模块(此处为app-web)需要配置该插件,其他模块只需作为普通Jar被依赖即可

内容的提问来源于stack exchange,提问作者kmanish

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 07:23:12