34

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

我为 IntelliJ 安装了 Play Framework 2 插件和 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
4

3 回答 3

57

更新:在较新的版本中,如果 IntelliJ IDEA,不再需要从 play/activator 创建模块。IntelliJ IDEA 现在对 SBT 项目有很好的支持。如果存在,请删除项目中所有与想法相关的目录。然后在 IntelliJ IDEA 中单击 File -> Open 并选择您的 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. 选择模块->myapp->依赖项
    2. 按加号图标并选择库(2)
    3. 添加 Scala 2.10.0 项目库
  4. 在 Scala Facet 中选择编译器库
    1. 选择Facets->Scala(myapp)
    2. 编译器库设置为 Scala 2.10.0
  5. 修复错误
    1. 选择Modules->myapp-build->Dependencies->scala-2.9.2并按减号图标
    2. 选择Libraries->Scala 2.9.2并按减号图标
  6. 修复myapp-build模块 的输出路径
    1. 选择模块->myapp-build->路径
    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在删除文件之前执行该命令,则会在您的 play 项目中获得双重依赖。

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

  1. update从您的游戏控制台运行任务
  2. 删除.idea_modules.idea/libraries目录
  3. idea with-sources=yes在播放控制台中运行命令
  4. 再次运行第 3 步
于 2013-04-24T08:00:27.557 回答
3

Play 控制台包含一个名为sbt-idea的 sbt 插件的分支。该剧的 fork 有点落后于原始插件,并且在 IntelliJ 中运行时会出现一些问题play idea。您可以使用没有任何问题的原始插件。为了在你的游戏项目中使用这个插件,你需要..

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从播放控制台运行。

于 2013-08-19T09:51:48.237 回答
0

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

  1. 默认自动保存功能
  2. 相当快速的 IntelliSense 功能
  3. Dracula UI,这对我来说很有趣

我通常使用 Play SBT 控制台运行和调试应用程序。这是合理的快。但是,有时在控制台上执行play命令时,我发现loading-project-info任务花费的时间太长(将近 10 分钟)。我不知道为什么有时会发生这种情况,但总的来说使用 Play SBT 控制台是我的选择。

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

想法错误

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

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

于 2013-04-22T01:52:00.150 回答