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.jargradle 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
相关产品推荐
相关产品推荐

