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

多模块Maven Spring Boot应用打包后启动即停止且不读取配置

问题分析与修复方案

你的两个问题根源在于Maven打包插件冲突、配置冗余以及子模块打包方式错误,以下是具体修复步骤:

一、核心问题拆解

  1. 配置文件无法读取:打包过程中配置文件未被正确纳入可执行Jar,或插件冲突导致资源路径异常
  2. 启动后立即Shutdown:非Web环境或打包后的Jar未正确识别Spring Boot的Web应用类型,或插件配置错误导致应用上下文未保持活跃

二、具体修复步骤

1. 修正父模块pom.xml

移除冲突的打包插件,仅保留必要配置:

  • 删除maven-shade-plugin:Spring Boot Maven插件已内置可执行Jar打包能力,无需额外使用shade插件
  • 删除maven-jar-plugin:父模块为pom打包类型,无需配置Jar插件的mainClass,且该配置会与Spring Boot插件冲突
  • 统一Spring Boot插件版本,避免依赖不一致

修改后的父pom.xml关键部分:

<modelVersion>4.0.0</modelVersion>

<groupId>com.mysite</groupId>
<artifactId>myapp</artifactId>
<packaging>pom</packaging>
<version>3.0.0-SNAPSHOT</version>
<name>myapp</name>

<build>
    <plugins>
        <!-- 统一配置Spring Boot插件版本,子模块继承 -->
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>2.7.8</version>
            <!-- 仅在启动模块执行repackage -->
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                    <configuration>
                        <!-- 默认仅对带有mainClass的模块生效 -->
                        <skip>true</skip>
                    </configuration>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>17</source>
                <target>17</target>
            </configuration>
        </plugin>
    </plugins>
</build>

<!-- properties和dependencies部分保留原内容,modules部分不变 -->

2. 修正gateway模块pom.xml

  • 移除手动指定的version,继承父模块版本
  • 启用Spring Boot插件的repackage功能,指定mainClass
  • 若为网关应用,建议添加spring-boot-starter-gateway依赖,替换或补充spring-boot-starter-web

修改后的gateway pom.xml:

<modelVersion>4.0.0</modelVersion>

<parent>
    <groupId>com.mysite</groupId>
    <artifactId>myapp</artifactId>
    <version>3.0.0-SNAPSHOT</version>
</parent>

<groupId>com.mysite</groupId>
<artifactId>myapp-gateway</artifactId>
<name>myapp-gateway</name>
<description>myapp Gateway Module</description>

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

<dependencies>
    <dependency>
        <groupId>com.mysite</groupId>
        <artifactId>myapp-service</artifactId>
    </dependency>
    <dependency>
        <groupId>com.mysite</groupId>
        <artifactId>myapp-util</artifactId>
        <scope>compile</scope>
    </dependency>
    <!-- 网关应用专属依赖 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-gateway</artifactId>
        <version>2.7.8</version>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <skip>false</skip>
                <mainClass>com.mysite.gateway.MyappGatewayApplication</mainClass>
            </configuration>
        </plugin>
    </plugins>
</build>

3. 修正service和util模块pom.xml

这两个模块是普通依赖模块,不需要打包成可执行Jar,因此移除spring-boot-maven-plugin,并继承父模块版本:

service模块修改后:

<modelVersion>4.0.0</modelVersion>

<parent>
    <groupId>com.mysite</groupId>
    <artifactId>myapp</artifactId>
    <version>3.0.0-SNAPSHOT</version>
</parent>

<groupId>com.mysite</groupId>
<artifactId>myapp-service</artifactId>
<name>myapp-service</name>
<description>myapp Service Module</description>

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

<dependencies>
    <dependency>
        <groupId>com.mysite</groupId>
        <artifactId>myapp-util</artifactId>
        <scope>compile</scope>
    </dependency>
</dependencies>

<!-- 移除spring-boot-maven-plugin -->

util模块修改后:

<modelVersion>4.0.0</modelVersion>

<parent>
    <groupId>com.mysite</groupId>
    <artifactId>myapp</artifactId>
    <version>3.0.0-SNAPSHOT</version>
</parent>

<groupId>com.mysite</groupId>
<artifactId>myapp-util</artifactId>
<name>myapp-util</name>
<description>myapp Utility Module</description>

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

<dependencies>
    <dependency>
        <groupId>com.rabbitmq</groupId>
        <artifactId>amqp-client</artifactId>
        <version>5.16.0</version>
    </dependency>
    <dependency>
        <groupId>com.google.code.gson</groupId>
        <artifactId>gson</artifactId>
        <version>2.10.1</version>
    </dependency>
</dependencies>

4. 验证配置文件位置

确保gateway模块的application.properties位于src/main/resources目录下,Maven打包时会自动将其纳入Jar的BOOT-INF/classes路径,Spring Boot可正常读取。

5. 重新打包运行

执行以下命令完成打包:

mvn clean package

运行gateway模块的可执行Jar:

java -jar myapp-gateway-3.0.0-SNAPSHOT.jar

内容的提问来源于stack exchange,提问作者Mohammad Hossein Shojaeinia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 01:39:52