如何在Play Framework和Scala中使用IntelliJ

我正在尝试使用IntelliJ与播放框架2.11应用程序。

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

我创build了一个Play应用程序。 我一直在努力编写和IntelliJ中运行Specs 2testing。 我的运行configuration说运行Specs 2testing时先运行“make”,但看起来不像我的testing类正在生成。 不停地告诉我,它找不到规格。 当我查看文件系统时,目标/testing类中没有代码,目录是空的。 此外,至less与运行Play控制台相比,这似乎需要很长时间才能完成构build。

我想看看人们如何使用与IntelliJ玩Play。 你只是使用IntelliJ作为编辑器,并通过播放控制台运行的一切?

有没有一种方法可以在IntelliJ中运行应用程序testing(让testing类运行)?

我从来没有任何问题运行的Play控制台和运行〜testing只testing= xxx.Spec。 它通常是相当快的。

当我尝试运行我的Specs2testing时,下面是我在IntelliJ中遇到的exception:

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 

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


IntelliJ IDEA与Play Framework 2有很好的集成。有时它会阻塞,但大部分时间运行。 我使用它来运行(单一,全部)testing,启动或debugging播放应用程序,并编辑我的代码(o;而这一切都在IDE内部,没有sbt控制台。

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

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

 play new myapp 

2.创buildIDE模块

启动播放控制台:

 cd newapp play 

创build模块:

 idea with-sources=yes exit 

3.configurationIDE

  1. 打开新创build的项目
  2. 打开模块设置(select项目并按F4)
  3. 将Scala库添加到您的项目
    1. selectModules-> myapp-> Dependencies
    2. 按加号图标并select库(2)
    3. 添加Scala 2.10.0项目库
  4. 在Scala构面中select编译器库
    1. selectFacets-> Scala(myapp)
    2. 编译器库设置为Scala 2.10.0
  5. 修复错误
    1. selectModules-> myapp-build-> Dependencies-> scala-2.9.2并按减号图标
    2. select库 – > Scala 2.9.2并按减号图标
  6. 修复myapp-build模块的输出path
    1. selectModules-> myapp-build->path
    2. 附加到输出path (X:\ projects \ myapp \ project \ target \ scala_2.9.2 \ classes)
    3. testing类附加到testing输出path (X:\ projects \ myapp \ project \ target \ scala_2.9.2 \ test-classes)

运行testing

selecttesting目录下的ApplicationSpec ,然后从上下文菜单中单击运行“ApplicationSpec” 。 你应该得到一个编译模板找不到的错误。 这是因为IDE不编译模板,但可以通过运行一次应用程序来完成。 也按照第5点,然后再次运行testing。

5.运行应用程序

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

6.更新依赖关系

如果您更新您的应用程序依赖关系,那么您必须告诉IDE有关此更改。 同样在运行播放更新命令后,您必须closuresIDE并从项目目录中删除一些文件。 如果在删除文件之前执行play idea命令,则会在播放项目中获得双重依赖关系。

执行以下步骤来更新您的依赖关系:

  1. 从您的播放控制台运行update任务
  2. 除去.idea_modules.idea/libraries目录
  3. 在播放控制台idea with-sources=yes命令运行这个idea with-sources=yes
  4. 再次运行第3步

Play控制台包含一个名为sbt-idea的sbt插件的分支 。 这个游戏的分支比原来的插件落后了一些,在运行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.从游戏控制台运行gen-idea

我通常使用IntellijIDEA(版本12.0.4)只适用于Play Framework代码编辑器,因为:

  1. 自动保存function默认
  2. 相当快的智能感知function
  3. 德古拉UI,这对我来说是一种享受

我通常使用Play SBT控制台运行和debugging应用程序。 这是合理的快速。 但是,有时在控制台上执行play命令时,我发现load-project-info任务耗时太长(近10分钟)。 我不知道为什么有时会发生这种情况,但总体而言,使用Play SBT控制台是我的select。

我这样做,因为通常应该是不应该被问题的东西解释为如下错误

IDEA错误

当我开始学习Play Framework的时候,我第一次面对这样的问题。 所以,最后,我select使用Play SBT控制台来运行和debugging应用程序。

对不起,我不能回答第2个问题。直到现在,我只尝试运行和debugging播放应用程序。 为了testing的目的,我从来没有尝试过的Play 2.x.