2013-04-21 233 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

相关问题