繁体   English   中英

IntelliJ 13的编译器在Play项目中找不到错误,但荧光笔没有

[英]IntelliJ 13's compiler doesn't find errors in Play projects but the highlighter does

我一直在努力让IntelliJ的编译告诉我使用Play Framework 2.3.3和Scala 2.11.2的多模块项目中的源代码中的错误 - IntelliJ是版本13.1.4(最新的稳定版,终极版)。

多模块项目的布局非常类似于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来查看是否有任何改变。 我已经尝试了“导入SBT项目”方法,将项目导入IntelliJ以及Play Framework的idea命令和sbt-idea插件的gen-idea命令(应该与Play的大致相似,因为它使用的是我认为这个插件的版本/分叉)。 将设置 - > IDE设置 - > Scala中的“增量编译”设置从“IntelliJ IDEA”更改为“sbt incremental compiler”也不会改变任何内容。

那些在那里看到过这个问题的人或者我可以尝试的任何想法? 这让我伤心:)。

TL; DR

如果我在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=16633http://plugins.jetbrains.com/update/index?pr=idea&updateId=16634找到这些版本。

这个问题似乎就是这个问题:http: //youtrack.jetbrains.com/issue/SCL-7423 - 它没有正式证实这确实导致了这个问题,但它似乎非常相关且相当重要。

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

真是个旅程。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM