如何在Play Framework和Scala中使用IntelliJ

时间:2013-04-21 20:13:20

标签: scala playframework intellij-idea

我正在尝试将IntelliJ与play framework 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

3 个答案:

答案 0 :(得分: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

<强> 2。创建IDE模块

启动播放控制台:

cd newapp
play

创建模块:

idea with-sources=yes
exit

第3。配置IDE

  1. 打开新创建的项目
  2. 打开模块设置(选择项目并按F4)
  3. 将Scala库添加到项目中
    1. 选择模块 - &gt; myapp-&gt;依赖关系
    2. 按加号图标,然后选择库(2)
    3. 添加Scala 2.10.0项目库
  4. 在Scala Facet中选择编译器库
    1. 选择 Facets-&gt; Scala(myapp)
    2. 编译器库设置为Scala 2.10.0
  5. 修复错误
    1. 选择 Modules-&gt; myapp-build-&gt; Dependencies-&gt; scala-2.9.2 并按减号图标
    2. 选择 Libraries-&gt; Scala 2.9.2 并按减号图标
  6. 修复 myapp-build 模块的输出路径
    1. 选择模块 - &gt; myapp-build-&gt;路径
    2. 附加到输出路径(X:\ projects \ myapp \ project \ target \ scala_2.9.2 \ classes)
    3. 测试类附加到测试输出路径(X:\ projects \ myapp \ project \ target \ scala_2.9.2 \ test-classes)
  7. <强> 4。运行测试

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

    <强> 5。运行应用程序

    选择一个控制器,然后从上下文菜单中单击运行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步

答案 1 :(得分: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

答案 2 :(得分:0)

我通常仅在Play Framework代码编辑器中使用IntellijIDEA(版本12.0.4),因为:

  1. 默认情况下自动保存功能
  2. 相当快的智能感知功能
  3. Dracula UI,对我来说是一种眼睛的快乐
  4. 我通常使用Play SBT控制台运行和调试应用程序。这很合理。但是,有时在控制台上执行play命令时,我发现 loading-project-info 任务花费的时间太长(接近10分钟)。我不知道为什么会发生这种情况,但总体而言,Play SBT控制台的使用是我的选择。

    我这样做是因为通常应该不是问题解释为错误,如下所示:

    IDEA Error

    第一次开始学习Play Framework时,我遇到了这样的问题。所以,最后,我选择使用Play SBT控制台来运行和调试应用程序。

    抱歉,我无法回答第2号问题。到目前为止,我只试过运行和调试播放应用程序。出于测试目的,我以前从未尝试过Play 2.x.