[英]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=16633和http://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.