Play2与IntelliJ集成问题:sbt子项目运行时检测不到主类
解决IntelliJ启动Play子项目时"No main class detected"的问题
我之前也碰到过几乎一模一样的情况,结合你的目录结构和报错信息来看,问题大概率出在IntelliJ的运行配置没正确识别子项目的Play主类,或是sbt项目的加载逻辑出了小问题。下面是几个亲测有效的解决办法:
1. 修正IntelliJ的运行配置细节
打开IntelliJ的Run/Debug Configurations,找到你用来启动Play项目的配置,在Configuration标签页里做这些调整:
- 手动指定Main class:Play 2.x的开发模式主类是
play.core.server.DevServerStart,生产模式是play.core.server.ProdServerStart,直接填进去就行 - 把Working directory设置为子项目的根目录,也就是
main-project/sub-project - 可以在VM options里添加
-Dplay.home=/path/to/main-project/sub-project(替换成你实际的路径),强制指定Play项目的根目录
2. 重新导入sbt项目,修复索引问题
有时候IntelliJ的sbt项目索引会“抽风”,重新导入就能解决大部分识别类问题:
- 点击右侧边栏的sbt工具窗口,点一下顶部的刷新按钮(圆圈箭头图标),让IntelliJ重新加载整个sbt项目
- 也可以打开File > Project Structure > Modules,检查sub-project的源目录(app、conf等)是否被标记为正确的类型,比如app是Sources,conf是Resources
3. 调整启动命令的参数
从你给出的IntelliJ启动命令来看,它用的是"project sub-project" run这种切换项目的写法,不如直接用sbt shell里的写法靠谱:
- 把运行配置里的Program arguments改成
sub-project/run,和你在sbt shell里执行的命令完全一致 - 另外记得在
main-project/project/build.properties里添加正确的sbt版本,比如sbt.version=1.9.6(换成你实际用的版本),报错里提到的"No sbt.version set"也可能导致sbt加载异常
4. 直接用IntelliJ的Play专属配置模板
IntelliJ有专门为Play项目做的配置模板,比自定义sbt配置更省心:
- 打开Run/Debug Configurations,点击+号,选择Play 2 App
- 在配置里选择你的sub-project作为Module,剩下的参数IntelliJ会自动识别
- 点击Apply后启动,基本不会再出现主类识别的问题
另外提一句,你日志里的JDK警告Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=256M; support was removed in 8.0,可以把VM options里的-XX:MaxPermSize=256M换成-XX:MetaspaceSize=256M,因为JDK 8已经取消了PermGen,用Metaspace替代了。
内容的提问来源于stack exchange,提问作者Luca
相关产品推荐
相关产品推荐

