配置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
相关产品推荐
相关产品推荐

