如何在Play Framework和Scala中使用IntelliJ

nop*_*lay 34 scala intellij-idea playframework

我试图使用IntelliJ与播放框架2.11应用程序.

我安装了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时从未遇到任何问题.它通常很快.

当我尝试运行我的Specs2测试时,这是我在IntelliJ中获得的异常:

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
Run Code Online (Sandbox Code Playgroud)

akk*_*kie 56

更新:在IntelliJ IDEA的较新版本中,不再需要从播放/激活器创建模块.IntelliJ IDEA现在对SBT项目提供了非常好的支持.如果存在,删除项目中的所有与想法相关的目录.然后在IntelliJ IDEA中单击文件 - >打开并选择build.sbt文件.就这样.


IntelliJ IDEA与Play Framework 2有很好的集成.有时它会卡住,但大部分时间都会运行.我用它来运行(单个,全部)测试,启动或调试播放应用程序并编辑我的代码(o;这一切都来自IDE内部,没有sbt控制台.

这是一个包含最重要步骤的简短教程.目前我使用IntelliJ IDEA 12.1和最新的Play Framework 2和Scala插件.

1.创建一个新的应用程序

play new myapp
Run Code Online (Sandbox Code Playgroud)

2.创建IDE模块

启动播放控制台:

cd newapp
play
Run Code Online (Sandbox Code Playgroud)

创建模块:

idea with-sources=yes
exit
Run Code Online (Sandbox Code Playgroud)

3.配置IDE

  1. 打开新创建的项目
  2. 打开模块设置(选择项目并按F4)
  3. 将Scala库添加到项目中
    1. 选择Modules-> myapp-> Dependencies
    2. 按加号图标并选择库(2)
    3. 添加Scala 2.10.0项目库
  4. 在Scala Facet中选择Compiler Library
    1. 选择Facets-> Scala(myapp)
    2. Compiler库设置为Scala 2.10.0
  5. 修复错误
    1. 选择Modules-> myapp-build-> Dependencies-> scala-2.9.2并按减号图标
    2. 选择Libraries-> Scala 2.9.2并按减号图标
  6. 修复myapp-build模块 的输出路径
    1. 选择Modules-> myapp-build-> Paths
    2. 附加到输出路径(X:\ projects\myapp\project\target\scala_2.9.2\classes)
    3. 测试类附加到测试输出路径(X:\ projects\myapp\project\target\scala_2.9.2\test-classes)

4.运行测试

选择测试目录下的ApplicationSpec,然后从上下文菜单中单击Run'ApplicationSpec'.您应该收到无法找到已编译模板的错误.这是因为IDE不编译模板,但这可以通过运行一次应用程序来完成.也请按照第5点,然后再次运行测试.

5.运行应用程序

选择一个控制器,然后从上下文菜单中单击Run Play 2 App.这应该在地址上启动应用程序:http://localhost:9000/.

6.更新依赖项

如果更新应用程序依赖项,则必须告知IDE有关此更改的信息.此外,在运行play update命令后,您必须关闭IDE并从项目目录中删除一些文件.如果play idea在删除文件之前执行该命令,则会在播放项目中获得双重依赖关系.

执行以下步骤以更新依赖项:

  1. update从播放控制台运行任务
  2. 删除.idea_modules.idea/libraries目录
  3. idea with-sources=yes在播放控制台中运行该命令
  4. 再次运行步骤3

  • 这只是对此答案的更新.在我的Mac上,当我运行想法with-sources = yes时,我遇到了源文件的问题.为了解决这个问题,我开始尝试而不是玩游戏.然后我从sbt运行以下命令:"update","update-classifierss","update-sbt-classifiers".这下载了很多来自我当地的资源.在那之后,我能够进入游戏控制台并运行"ide​​a with-sources = yes"并让它工作.注意:我在Ubuntu 12.10上没有遇到同样的问题 (3认同)