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

配置Groovy优先编译后Grails应用主类查找失败求助

解决Grails Rest-API项目中Groovy优先编译导致的主类找不到问题

首先咱们来拆解下问题根源:你修改sourceSets让Groovy编译包含Java目录,但漏掉了Grails主类所在的grails-app/init目录——这个目录是Grails存放Application启动类的默认位置,你的初始配置没把它加入Groovy的源码路径,导致编译时根本没生成这个类的字节码,后续的findMainClass和bootRun自然会报错。

下面是修正后的完整解决方案:

步骤1:修正sourceSets配置

更新build.gradle里的sourceSets部分,把grails-app/init也加到Groovy的源码目录中:

sourceSets {
    main {
        groovy {
            // 包含所有需要编译的Groovy、Java以及Grails初始化类目录
            srcDirs = ['src/main/groovy', 'src/main/java', 'grails-app/init']
        }
        java {
            srcDirs = [] // 避免Java代码被重复编译
        }
    }
}

步骤2:确认主类配置正确性

保持你已添加的springBoot配置,但要确保类路径和实际文件完全匹配——比如你的Application类如果在grails-app/init/foo/bar/Application.groovy,那当前配置就没问题:

springBoot {
    mainClass = "foo.bar.Application"
}

步骤3:重新编译运行

执行以下命令清理并重新构建项目:

gradle clean build

构建成功后,再尝试启动应用:

gradle bootRun

为什么这样能解决问题?

Grails 3.x基于Spring Boot,它的启动类默认放在grails-app/init下,而你最初的配置只覆盖了src/main下的目录,没包含这个Grails特有的目录,导致编译时遗漏了主类。把grails-app/init加入Groovy的源码目录后,Groovy编译器会处理这个目录下的类,生成正确的字节码,Spring Boot就能正常找到主类并启动了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:04:44