2016-09-26 91 views
0

從兩個新事物同時開始:IntelliJ + Scala(+ Play)。IntelliJ:導入play.api._打破其他導入

如果我在相同的類上導入play.api._,我在編輯器上的IntelliJ報告錯誤上有一些奇怪的問題。 Project是一個用IntelliJ scala + play 2.4模板創建的新項目。

實例應用程序/控制器/子包文件ImportError.scala:

的IntelliJ的編輯是得到安寧我的錯誤就行 「進口controllers.ClassToImport」: 「無法解析符號ClassToImport」

如果我選擇'Recompile ImportError.scala',控制檯沒有給出編譯錯誤。

如果我通過刪除play.api導入來更改類:

package controllers.subpackage 

import controllers.ClassToImport 

class ImportError { 
    val instance = new ClassToImport() 
} 

然後,IntelliJ不再給我編輯器上的錯誤。

而且這裏的情形等觀察:

  • 如果我複製粘貼戲導入之前後者進口的IntelliJ會改變我的進口:「進口controllers.ClassToImport」和「進口的發揮。 api。{controllers,_}',所以這裏一定是一些線索。爲什麼它認爲我想要玩api的控制器?
  • 如果我改變了兩個導入的順序,那麼編輯器和編譯結果都很高興。
  • 如果我將播放導入更改爲「import play.api.controllers」,那麼編輯器很高興,但編譯結果是「對象控制器不是package play.api的成員」。我完全不理解這一點,至於我的理解(如錯誤所示)那裏不存在play.api.controllers,那爲什麼IntelliJ編輯器接受它呢?

上面的例子是一個孤立的例子,我在使用IntelliJ導入play.api._的實際項目中遇到了這個問題。應該可以通過最新的IntelliJ IDEA社區2016.2.4輕鬆重現。

+0

一個新資料片:如果我去的外部庫我項目並選擇「com.typesafe.play:play_2.11:2.4.8.jar」和「打開庫文件設置」並刪除源文件,然後問題就解決了。編輯器或編譯時沒有錯誤。 – Raipe

回答

0

這裏的問題是,你從play.api進口的東西,裏面有一個名爲controllers的包。

因此,當您在下一個語句中嘗試導入controllers.ClassToImport時,它將在play.api.controllers中搜索類ClassToImport,這將失敗。

爲了解決這個問題,您可以嘗試重新排列進口

import controllers.ClassToImport 
import play.api._ 

或重命名播放controllers包:

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