2013-04-21 221 views
34

我正在嘗試將IntelliJ與Play Framework 2.11應用程序一起使用。如何在Play Framework和Scala中使用IntelliJ

我安裝了Play Framework 2插件和IntelliJ的Scala插件。

我創建了一個Play應用程序。我一直在努力編寫和運行IntelliJ中的Specs 2測試。我的運行配置說運行Specs 2測試時首先運行「make」,但它看起來不像我的測試類正在生成。不斷告訴我,它無法找到規格。當我查看文件系統時,目標/測試類中沒有代碼,該目錄是空的。此外,至少與運行Play控制檯相比,這似乎需要很長時間才能完成構建。

我想看看人們如何使用Play with IntelliJ。你只是使用IntelliJ作爲編輯器,並通過Play控制檯運行所有內容?

有沒有一種方法可以在IntelliJ中運行應用程序測試(讓測試類運行)?

我從來沒有任何問題運行Play控制檯並運行〜test-only test = xxx.Spec。它通常是相當快的。

這裏是我在的IntelliJ獲得異常,當我嘗試運行我的Specs2測試:

Exception in thread "main" java.lang.reflect.InvocationTargetException 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:601) 
    at org.jetbrains.plugins.scala.testingSupport.specs2.JavaSpecs2Runner.runSingleTest(JavaSpecs2Runner.java:130) 
    at org.jetbrains.plugins.scala.testingSupport.specs2.JavaSpecs2Runner.main(JavaSpecs2Runner.java:76) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:601) 
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120) 
Caused by: java.lang.RuntimeException: can not create specification: test.ApplicationSpec 
    at scala.sys.package$.error(package.scala:27) 
    at org.specs2.specification.SpecificationStructure$.createSpecification(BaseSpecification.scala:96) 
    at org.specs2.runner.ClassRunner.createSpecification(ClassRunner.scala:64) 
    at org.specs2.runner.ClassRunner.start(ClassRunner.scala:35) 
    at org.specs2.runner.ClassRunner.main(ClassRunner.scala:28) 
    at org.specs2.runner.NotifierRunner.main(NotifierRunner.scala:24) 
    ... 11 more 

回答

56

更新:在較新的版本如果IntelliJ IDEA,它不再需要從播放/激活器創建模塊。 IntelliJ IDEA現在對SBT項目提供了非常好的支持。如果存在,請刪除項目中所有與創意相關的目錄。然後在IntelliJ IDEA中單擊文件 - >打開並選擇您的build.sbt文件。就這樣。


IntelliJ IDEA對於Play Framework 2有很好的集成。有時它會阻塞,但大多數情況下它會運行。我使用它來運行(單一,全部)測試,啓動或調試播放應用程序並編輯我的代碼(o;並且這全部來自IDE內部並且沒有sbt控制檯)

這是一個簡短的教程,重要步驟。目前我使用的IntelliJ IDEA 12.1與最新的遊戲框架2和Scala插件。

1.創建一個新的應用程序

play new myapp 

2.創建IDE模塊

開始播放控制檯:

cd newapp 
play 

創建模塊:

idea with-sources=yes 
exit 

3.配置IDE

  1. 打開新創建的項目
  2. 打開模塊設置(選擇項目並按F4)
  3. Scala庫添加到您的項目
    1. 選擇模塊 - > myapp->依賴
    2. 按加號圖標,選擇庫(2)
    3. 添加斯卡拉2.10.0項目庫
  4. 在斯卡拉小面
    1. 選擇Facets->選擇編譯器庫斯卡拉(MYAPP)
    2. 設置編譯庫 Scala的2.10.0
  5. 修復錯誤
    1. 選擇模塊 - > MYAPP - 建設 - > Dependencies->斯卡拉-2.9.2並按減號圖標
    2. 選擇Libraries->斯卡拉2.9.2並按減號圖標
  6. 固定的輸出路徑爲的myapp-建立模塊
    1. 選擇模塊 - > MYAPP - 建設 - >路徑
    2. 追加輸出路徑(X:\項目\ MYAPP \項目\目標\ scala_2.9 。2個\班)
    3. 追加測試類測試輸出路徑(X:\項目\ MyApp的\項目\目標\ scala_2.9.2 \測試類)

4.運行測試

選擇ApplicationSpec test目錄下,然後單擊運行 'ApplicationSpec'從上下文菜單中。你應該得到一個編譯模板找不到的錯誤。這是因爲IDE不會編譯模板,但可以通過運行一次應用程序來完成。同樣按照第5點,然後再次運行測試。

5.運行應用程序

選擇一個控制器,然後單擊運行從上下文菜單中播放2應用。這應該在地址:http://localhost:9000/上啓動應用程序。

6.更新依賴

如果您更新應用程序的依賴,那麼你必須告訴這個變化IDE。同樣在運行播放更新命令後,您必須關閉IDE並從項目目錄中刪除一些文件。如果在刪除文件之前執行play idea命令,則會在播放項目中獲得雙重依賴關係。從您的遊戲控制檯

  1. 運行update任務
  2. 在戲中刪除.idea_modules.idea/libraries目錄
  3. 運行idea with-sources=yes命令:

    執行以下步驟來更新你的依賴控制檯

  4. 再次運行步驟3
+1

到目前爲止,這工作!非常感謝!我有一個棘手的問題,當你運行一個測試時,它會加載項目信息和一切,這需要很長時間。有什麼方法可以更快地運行測試嗎?我的猜測是它需要很長時間,因爲它在啓動測試之前運行「Make」。任何指針? – noplay 2013-04-24 23:47:15

+0

還有一個問題,它看起來像插件創建了一堆XML文件,這些文件將這些類硬編碼到Play安裝的位置。我猜如果不止一個人在項目中工作,你需要確保每個人都有安裝在同一文件路徑上的遊戲? – noplay 2013-04-24 23:56:48

+0

到目前爲止我的朋友很好。爲了避免運行測試時的編譯時間過長,我在IntelliJ中啓動了SBT控制檯並運行〜test:compile。然後,每次我做一個代碼更改代碼重新編譯QUICKLY,無論是應用程序代碼還是測試代碼。在我的運行配置中,我在測試啓動之前刪除了「Make」。 BDD/TDD的速度非常快。 100萬謝謝你的答案! – noplay 2013-04-25 00:35:33

0

我通常使用IntellijIDEA(版本12.0.4)僅因爲玩框架代碼編輯器:

  1. 自動保存默認功能
  2. 相當快的智能感知功能
  3. 德古拉UI,它是一個眼睛高興我

我通常使用Play SBT控制檯運行和調試應用程序。這很合理。但是,有時在控制檯上執行play命令時,我發現加載項目信息任務花費的時間太長(接近10分鐘)。我不知道爲什麼有時會發生這種情況,但總體來說,Play SBT控制檯的使用是我的選擇。

我這樣做,因爲通常應該 - 不是最解決問題的東西 intepreted爲錯誤類似以下內容:

IDEA Error

第一次,當我開始學習Play Framework,我正面臨着這樣的問題。所以,最後,我選擇使用Play SBT控制檯來運行和調試應用程序。

對不起,我不能回答問題2號。直到現在,我只嘗試運行和調試播放應用程序。爲了測試目的,我從未嘗試過Play 2.x.

+0

感謝您的回覆。我認爲你只使用IntelliJ作爲編輯器。昨晚,我設法在IntelliJ中安裝了SBT控制檯,並且我可以在那裏執行像〜test-only test = xxxSPec這樣的事情。非常好,從編譯的角度來看非常快。我同意,加載項目信息可能需要一段時間,這就是爲什麼最好簡單地讓play/sbt控制檯始終運行 – noplay 2013-04-22 13:19:30

+1

我暫時沒有回答問題。我希望有人能夠迴應他們是否能夠在Play和IntelliJ之間獲得更好的整合。特別是我發佈的例外情況。 – noplay 2013-04-22 13:20:38

+0

+1是的,我的朋友,我也想對這個問題給予很好的關注! – 2013-04-23 00:13:04

3

Play console包含一個名爲sbt-idea的插件插件。該遊戲的叉子稍微滯後於原始插件,並且在運行play idea時在IntelliJ中存在一些問題。你可以使用原來的插件,它沒有任何問題。爲了在你的遊戲項目中使用這個插件,你需要..

1.增加以下行project/plugins.sbt文件:(中間的空行是必需的)

resolvers += "Sonatype snapshots" at "http://oss.sonatype.org/content/repositories/snapshots/" 

addSbtPlugin("com.github.mpeltonen" % "sbt-idea" % "1.5.1") 

2.Run來自播放控制檯的gen-idea

相關問題