IntelliJ Scala报错: object mail is not a member of views.html
报错根因
该报错本质是Play框架Twirl模板的编译生成类未被构建链路识别:views.html.mail.auth 是app/views/mail/auth.scala.htmlHTML模板经Twirl插件编译后自动生成的Scala单例对象。既然同配置同事环境可正常运行、源码与依赖配置无问题,故障点都在本地构建环境的编译顺序、目录索引、插件加载环节,和JDK17版本无直接关联(Play 2.8.x及以上版本均原生兼容JDK17)。
修复步骤(按生效优先级排序)
- 先校验模板路径合法性
确认报错对应的模板文件完整路径为app/views/mail/auth.scala.html,不要将模板文件误放在test目录、resources目录或其他非Twirl扫描路径下,非标准路径下的模板不会触发自动编译。 - 命令行验证sbt原生构建结果
关闭IntelliJ,在项目根目录执行sbt clean compile做全量清理编译:- 如果命令行编译也抛出相同报错,检查本地sbt版本是否和团队统一版本一致,删除本地
~/.sbt下对应版本的缓存后重编 - 如果命令行编译完全正常,仅IntelliJ内飘红报错,故障点确定为IDE配置问题,和代码无关
- 如果命令行编译也抛出相同报错,检查本地sbt版本是否和团队统一版本一致,删除本地
- 修正IntelliJ sbt构建配置
打开IntelliJ设置页,进入Build, Execution, Deployment > Build Tools > sbt配置项:- 确认
Project SDK选中本地安装的JDK17 - 将
Build and run using、Run tests using两个选项均设置为sbt,不要使用IntelliJ自带编译器——IntelliJ原生编译器对Twirl、sbt自动生成源码的识别存在已知缺陷,使用sbt作为构建执行器可规避绝大多数识别问题
- 确认
- 检查目录标记状态
打开项目结构配置,确认项目根目录下的target目录未被标记为Excluded;如果已经改过构建配置还是报错,找到Twirl生成源码的目录target/scala-2.13/twirl/main,右键将其标记为Generated Sources Root,IDE会立刻重新索引该目录下的生成类,报错即时消除。 - 刷新sbt插件依赖
打开IntelliJ右侧的sbt工具窗口,点击刷新按钮重新拉取加载所有sbt插件,确认project/plugins.sbt中引入的Twirl插件版本和Scala 2.13、当前sbt版本匹配,插件加载完成后重新触发项目编译。
内容的提问来源于stack exchange,提问作者heuristic123
相关产品推荐
相关产品推荐

