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

使用Gradle.build.kt在Railway部署应用失败:主类找不到

解决Railway部署Spring Boot应用时的ClassNotFoundException错误

你遇到的ClassNotFoundException和主类加载失败问题,核心原因是build.gradle.kts中主类的配置错误,具体问题及修复方案如下:

问题分析

  1. 主类名格式错误:你定义的val mainClassName = "HelpDeskApplication.java"多了.java后缀,主类名只需要纯类名,不需要文件扩展名。
  2. Main-Class属性配置错误:tasks.jar中指定的br.com.zezinho.helpdesk是包名,不是主类的全限定名称,正确的主类全限定名应为br.com.zezinho.helpdesk.HelpDeskApplication(对应你仓库中src/main/java/br/com/zezinho/helpdesk/HelpDeskApplication.java文件)。
  3. 未利用Spring Boot插件自动配置:使用Spring Boot插件时,无需手动配置jar任务的Manifest,插件可自动处理可执行jar的构建逻辑。

修复方案

步骤1:修正主类配置

将build.gradle.kts中的相关配置替换为以下内容:

group = "br.com.zezinho"
version = "0.0.1-SNAPSHOT"
java.sourceCompatibility = JavaVersion.VERSION_11

// 正确指定主类全限定名
springBoot.mainClass.set("br.com.zezinho.helpdesk.HelpDeskApplication")

删除原来错误的val mainClassName = "HelpDeskApplication.java"行。

步骤2:移除手动的jar任务配置(推荐)

Spring Boot插件的bootJar任务会自动生成包含所有依赖的可执行fat jar,无需手动配置Class-Path和Main-Class,因此可以删除整个tasks.jar代码块:

// 删除以下这段代码
tasks.jar {
   manifest.attributes["Main-Class"] = "br.com.zezinho.helpdesk"
   manifest.attributes["Class-Path"] = configurations
      .runtimeClasspath
      .get()
      .joinToString(separator = " ") { file ->
         "libs/${file.name}"
      }
}

步骤3:配置Railway的构建与启动命令

在Railway部署设置中,指定:

  • 构建命令:./gradlew bootJar
  • 启动命令:java -jar build/libs/helpdesk-back-0.0.1-SNAPSHOT.jar(文件名需匹配你的项目版本号)

补充说明

bootJar生成的可执行jar包含了所有依赖,避免了手动配置类路径的麻烦,更适合云平台部署场景。如果坚持使用普通jar任务,需要确保所有依赖文件路径与Class-Path配置完全匹配,这种方式在云环境中容易出错,因此优先推荐使用bootJar。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 08:56:08