IntelliJ:导入play.api._打破其他导入

时间:2016-09-26 18:06:34

标签: scala intellij-idea import playframework

同时从两个新事物开始:IntelliJ + Scala(+ Play)。

如果我在同一个类上导入play.api._,我在编辑器上的IntelliJ报告错误上遇到了一些奇怪的问题。 Project是使用IntelliJ scala + play 2.4模板创建的新项目。

app / controllers / subpackage中的示例文件ImportError.scala:

package controllers.subpackage

import play.api._
import controllers.ClassToImport

class ImportError {
  val instance = new ClassToImport()
}

IntelliJ编辑器在“import controllers.ClassToImport”行上发现错误: “无法解析符号ClassToImport”

如果我选择“Recompile ImportError.scala”,则控制台不会出现编译错误。

如果我通过删除play.api导入来更改类:

package controllers.subpackage

import controllers.ClassToImport

class ImportError {
  val instance = new ClassToImport()
}

然后IntelliJ不再在编辑器上给我错误。

此处还有其他观察情况:

  • 如果我在播放导入之前剪切粘贴后一个导入,IntelliJ会将我的导入更改为:'import controllers.ClassToImport'和'import play.api。{controllers,_}',所以这里必须有一些线索。为什么我认为我想要控制器来玩api?
  • 如果我更改了两个导入的顺序,则编辑器和编译结果都很高兴。
  • 如果我将播放导入更改为“import play.api.controllers”,那么编辑器很高兴但是编译结果是“对象控制器不是包play.api的成员”。我根本不理解这一点,至于我的理解(如错误所示),没有play.api.controllers,为什么IntelliJ编辑接受它呢?

以上示例是我在使用IntelliJ导入play.api._的实际项目中遇到的问题的一个独立示例。应该可以使用最新的IntelliJ IDEA社区2016.2.4轻松复制。

1 个答案:

答案 0 :(得分:0)

这里的问题是你要从play.api导入所有内容,并且里面有一个名为controllers的包。

因此,当您在下一个语句中尝试导入controllers.ClassToImport时,它会在ClassToImport中搜索课程play.api.controllers,这将失败。

要解决此问题,您可以尝试重新排序导入

import controllers.ClassToImport
import play.api._

或重命名播放controllers包:

import play.api.{controllers => playControllers, _}
import controllers.ClassToImport