如何在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
- 打开新创build的项目
- 打开模块设置(select项目并按F4)
- 将Scala库添加到您的项目
- selectModules-> myapp-> Dependencies
- 按加号图标并select库(2)
- 添加Scala 2.10.0项目库
- 在Scala构面中select编译器库
- selectFacets-> Scala(myapp)
- 将编译器库设置为Scala 2.10.0
- 修复错误
- selectModules-> myapp-build-> Dependencies-> scala-2.9.2并按减号图标
- select库 – > Scala 2.9.2并按减号图标
- 修复myapp-build模块的输出path
- selectModules-> myapp-build->path
- 将类附加到输出path (X:\ projects \ myapp \ project \ target \ scala_2.9.2 \ classes)
- 将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
命令,则会在播放项目中获得双重依赖关系。
执行以下步骤来更新您的依赖关系:
- 从您的播放控制台运行
update
任务 - 除去
.idea_modules
和.idea/libraries
目录 - 在播放控制台
idea with-sources=yes
命令运行这个idea with-sources=yes
- 再次运行第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代码编辑器,因为:
- 自动保存function默认
- 相当快的智能感知function
- 德古拉UI,这对我来说是一种享受
我通常使用Play SBT控制台运行和debugging应用程序。 这是合理的快速。 但是,有时在控制台上执行play
命令时,我发现load-project-info任务耗时太长(近10分钟)。 我不知道为什么有时会发生这种情况,但总体而言,使用Play SBT控制台是我的select。
我这样做,因为通常应该是不应该被问题的东西解释为如下错误 :
当我开始学习Play Framework的时候,我第一次面对这样的问题。 所以,最后,我select使用Play SBT控制台来运行和debugging应用程序。
对不起,我不能回答第2个问题。直到现在,我只尝试运行和debugging播放应用程序。 为了testing的目的,我从来没有尝试过的Play 2.x.