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

Spring Boot多模块项目FatJar启动异常:启动后退出/Bean找不到

Gradle构建Spring Boot多模块Jar启动问题排查与解决

问题1:部分服务启动后立即退出(无端口监听)

原因

服务发现类项目(如Eureka Server)若使用gradle jar普通打包,生成的是普通Jar文件,不包含Spring Boot启动引导逻辑,运行时执行完main方法后直接退出,不会维持Spring上下文和端口监听。本质是对应模块未正确配置Spring Boot插件,导致打包产物不是可执行的Spring Boot Jar。

解决办法

  • 在目标服务模块的build.gradle中添加Spring Boot插件配置:
    plugins {
        id 'org.springframework.boot' version '你的Spring Boot版本号'
        id 'io.spring.dependency-management' version '对应依赖管理版本'
        id 'java'
    }
    
  • 执行gradle bootJar命令打包,替代普通的gradle jar,bootJar会生成包含启动器的可执行Jar。
  • 启动时使用java -jar 你的服务模块名称-boot.jar运行,确保调用的是Spring Boot可执行Jar。

问题2:UserManagement服务启动抛出NoSuchBeanDefinitionException

原因

  • 包含UserLoginOTPRepository的类库模块未被正确打包进UserManagement服务的Jar中,或Spring组件扫描范围未覆盖该类库的包路径。
  • Gradle依赖配置错误:若UserManagement模块对类库模块的依赖使用compileOnly或testImplementation,打包时不会将类库字节码包含进去,导致运行时找不到Bean。
  • 类库模块中的UserLoginOTPRepository未标注@Repository注解,IntelliJ启动时会自动扫描所有模块代码,但打包后依赖类库的组件未被Spring识别。

解决办法

  • 检查UserManagement模块的build.gradle依赖配置,确保类库模块的依赖为implementation:
    dependencies {
        implementation project(':你的类库模块名称')
        // 其他依赖项...
    }
    
  • 确认类库模块中的UserLoginOTPRepository标注了@Repository注解,同时在UserManagement服务的启动类上指定组件扫描范围,比如:
    @SpringBootApplication(scanBasePackages = {"com.your.user.management", "com.your.common.repository"})
    public class UserManagementApplication {
        public static void main(String[] args) {
            SpringApplication.run(UserManagementApplication.class, args);
        }
    }
    
  • 执行gradle clean bootJar清除缓存后重新打包,避免旧缓存导致的依赖缺失,启动时使用新生成的bootJar文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 13:32:11