scala - IntelliJ 1 3's compiler doesn' t 在 Play 项目中发现错误,但荧光笔确实如此

标签 scala intellij-idea playframework

我一直在尝试使用 Play Framework 2.3.3 和 Scala 2.11.2 获取 IntelliJ 的编译,以通知我源代码中的错误 - IntelliJ 是版本 13.1.4(最新稳定版,Ultimate版)。

多模块项目的布局与 Adrian Hurt 的 play-multidomain-seed 项目非常相似,参见 https://github.com/adrianhurt/play-multidomain-seed或在 Typesafe Activator 中以供进一步引用。层次结构如下所示:

/root
   /app
      ...
   /conf
      ...
   /modules
      /module1
         /app
            ...
         /conf
            ...
      /module2
         /app
            ...
         /conf
            ...

根项目有一个 build.sbt 以及一个包含 Scala 对象的项目目录,该对象包含在构建过​​程中使用的通用设置和辅助方法。每个子项目都位于 modules 文件夹中,并且还有一个 build.sbt 在根级别的 build.sbt 中引用。

现在,如果我使用前面提到的 play-multidomain-seed 项目模板,我可以使用 activator/sbt 让一切正常运行>。在我使用“导入 SBT 项目”功能将项目导入 IntelliJ 后,我可以使用它,但是当我运行编译时(即 CTRL+F9 用于“Make project”——无论我运行增量编译还是完全重新编译)它不会显示任何编译时错误(例如无法解析的符号或其他语法错误)。代码编辑器中的 Scala 荧光笔将显示正确的错误消息!在命令行上运行 sbt/activator 中的编译会发现错误,而 IntelliJ 只会说“编译成功完成”。

有趣的是,这似乎只发生在 Play 项目的子项目中,一个使用标准文件夹布局的库项目(即 src/main/scala 等中的源代码)工作很好 - 即我从 IntelliJ 得到正确的编译器反馈。源和资源路径根据 IntelliJ 的“项目结构”对话框正确设置,即 Play 子项目使用 app 作为它们的源文件夹。

我有另一个基于 Play 2.2.x 的项目,它使用单个 Build.scala 文件而不是单独的 build.sbt 文件并且工作正常 - 我没有我并没有真正想出如何将 Build.scala 文件“移植”到 Play 2.3,但是因为他们已经改变了很多东西并且文档说 build.sbt是(尽可能)最佳实践。

我还没有开始重新安装 Scala/Play 插件。我可能会用 IntelliJ 14 的 EAP 试试这个,看看是否有任何改变。我尝试了将项目导入 IntelliJ 的“导入 SBT 项目”方法以及 Play Framework 的 idea 命令和 sbt- 的 gen-idea 命令idea 插件(这应该与 Play 所做的大致相似,因为我认为它使用的是该插件的某个版本/分支)。在设置 -> IDE 设置 -> Scala 中将“增量编译方式”设置从“IntelliJ IDEA”更改为“sbt 增量编译器”也不会改变任何内容。

有没有人也看到过这个问题,或者对我可以尝试的方法有什么想法?这让我很难过:)。

长话短说

如果我在 Scala 源文件中有错误,IntelliJ 启动的编译过程将不会报告它,但是控制台上的 sbt 会正确报告它。 IntelliJ 荧光笔(在代码编辑器中)也将其标记为带有正确错误消息的错误(例如“无法解析符号 xyz”)。这只发生在 Play 模块上,而不发生在“标准”库项目上。我认为编译器只是因为我不明白的原因而没有编译 Play 模块中的源文件。

最佳答案

所以在所有这些很好的混淆之后,事实证明这是 IntelliJ 的 Play2 支持插件版本 0.41 的问题,因为将 Scala 和 Play 2 插件降级到 0.38.441 解决了我的问题。您可以在 http://plugins.jetbrains.com/update/index?pr=idea&updateId=16633 找到这些版本和 http://plugins.jetbrains.com/update/index?pr=idea&updateId=16634 .

有问题的错误似乎是这个:http://youtrack.jetbrains.com/issue/SCL-7423 - 尚未正式确认这确实导致了此问题,但它似乎非常相关且非常重要。

我认为它与 build.sbt 文件相关的原因是,在将 build.sbt 重构为 Build.scala 时,我安装了更新 Scala/Play 插件的 IntelliJ 14 EAP,并且由于插件文件夹在 IntelliJ 13 和 14 EAP 之间共享,所以它只是覆盖了它们。当我因为 14 EAP 没有解决问题而切换回 IntelliJ 13 时,我只降级/重新激活了 0.41 版本的 Scala 插件,而 Play 插件仍然停用 - 在 0.41 版本中再次激活它使问题重新出现。

多么美好的旅程。

关于scala - IntelliJ 1 3's compiler doesn' t 在 Play 项目中发现错误,但荧光笔确实如此,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25514439/

相关文章:

android - 无法更新 Android Studio - 只能下载

java - 如何在 Play 框架 2 中格式化输入值?

json - Scala 2.10,它对 JSON 库和案例类验证/创建的影响

scala - ZIO 流 : Which is the difference between a ZSink and a ZTransducer?

intellij-idea - 如何在intelj项目的所有文件中搜索带有模式的字符串?

heroku - 将基于Play 2.1-SNAPSHOT的应用程序部署到Heroku

scala - 解析运行 Play 应用程序的端口

json - 将 spark 数据框写为嵌套的 JSON 文档

json - 数据帧Spark Scala爆炸了JSON数组

postgresql - 如何远程连接到 PostgreSQL?