【问题标题】:IntelliJ 13's compiler doesn't find errors in Play projects but the highlighter doesIntelliJ 13 的编译器在 Play 项目中没有发现错误,但荧光笔却发现了
【发布时间】:2014-08-26 20:14:33
【问题描述】:

我一直在尝试获取 IntelliJ 的编译,以通知我使用 Play Framework 2.3.3 和 Scala 2.11.2 的多模块项目中的源代码中的错误 - 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 用于“制作项目”——运行增量编译或完全重新编译)它不会显示任何编译时错误(例如无法解析的符号或其他语法错误)。代码编辑器中的 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-idea 插件的 gen-idea 命令(这应该与 Play 所做的大致相似,因为它是我认为使用这个插件的某个版本/分支)。将设置 -> IDE 设置 -> Scala 中的“增量编译方式”设置从“IntelliJ IDEA”更改为“sbt 增量编译器”也不会改变任何内容。

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

TL;DR

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

【问题讨论】:

  • 我刚刚完成了从 4 个 build.sbt 文件中迁移项目(1 个用于引用 3 个子项目 sbt 文件的根项目)。在 Play 2.3 的 SBT 插件更改遇到一些障碍后,我在 playframework.com/documentation/2.3.x/Migration23 的迁移指南的帮助下运行了它。现在使用单个Build.scala 文件并使用idea 命令生成IDEA 项目文件,IntelliJ 实际上在构建项目时报告错误!我感到震惊和敬畏 - build.sbt 文件或 IntelliJ 的 Scala 插件一定有问题......

标签: scala intellij-idea playframework


【解决方案1】:

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

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

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

多么美妙的旅程。

【讨论】:

  • 我遇到了同样的问题,我的多个播放模块无法编译。 Sbt 编译工作。但是 IDE 无法编译的事实真的很烦人。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-13
  • 1970-01-01
相关资源
最近更新 更多