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

Spring Boot部署Railway.app遇NoClassDefFoundError问题求助

解决方案

问题核心是自定义的jar{}配置覆盖了Spring Boot Gradle插件默认的Fat Jar构建逻辑,导致生成的Jar仅包含项目自身代码,未打包Spring Boot核心依赖,启动时无法找到SpringApplication类。

修复步骤:

  • 删除自定义的jar{}代码块:Spring Boot插件会自动扫描带@SpringBootApplication注解的类作为主类,并构建包含所有依赖的Fat Jar,无需手动配置Main-Class。
  • (可选)手动指定主类:若插件未自动识别主类,在build.gradle中添加以下配置:
    springBoot {
        mainClass = 'com.lagalt.LagaltProjectApplication'
    }
    
  • 配置Railway启动命令(若默认执行失败):在Railway的部署设置中,指定启动命令为:
    java -jar build/libs/lagalt-0.0.1-SNAPSHOT.jar
    
    注意替换为本地执行gradle bootJar后,build/libs目录下实际生成的Jar文件名。

修复后的完整build.gradle示例:

plugins {
    id 'java'
    id 'org.springframework.boot' version '3.0.4'
    id 'io.spring.dependency-management' version '1.1.0'
}

group = 'com.lagalt'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '17'

configurations {
    compileOnly {
        extendsFrom annotationProcessor
    }
}

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter'
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    compileOnly 'org.projectlombok:lombok'
    runtimeOnly 'org.postgresql:postgresql'
    annotationProcessor 'org.projectlombok:lombok'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

// 可选:手动指定主类(若插件未自动识别)
springBoot {
    mainClass = 'com.lagalt.LagaltProjectApplication'
}

tasks.named('test') {
    useJUnitPlatform()
}

验证方法:

本地执行gradle bootJar命令,运行生成的Jar文件确认能正常启动,再重新部署到Railway即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 13:35:35