使用Intellij为Play Framework构建测试非常缓慢。

6
有没有一种方式可以加快在Intellij中使用Play Framework进行单元测试的构建时间?我正在进行TDD。每次执行测试时,编译需要大约30-60秒的时间。即使只是一个简单的“Hello World”测试也需要时间。重新运行同样的测试,即使没有任何更改,仍将启动“make”进程。
我使用的是Intellij 14.1,在Play 2.3.8上编写Scala。
我已经尝试将Java编译器设置为eclipse,并尝试将Scala编译器设置为SBT。
3个回答

3
在Intellij 14.1.2中,我所采用的解决方法是:
1)从测试中删除makeEdit Configurations -> Defaults -> Scala Test -> Before launch -> (-) Make
2)使用~ test:compile启动activator(或play)(例如:activator ~test:compile)或(sbt ~ test:compile
这样可以防止Intellij每次调用make时都会调用Play编译服务器。编译被委托给外部的sbt/activator/play进程进行连续编译。缺点是,在编译完成前立即运行测试时,您可能会遇到NoClassDefinedFound异常。此外,您还需要监视一个额外的进程。但是,与Intellij的默认设置相比,这种设置速度要快得多(目前)。希望这对任何人都有所帮助。

2
我假设您知道问题是在构建时出现的,而实际运行测试本身的时间可以忽略不计。
您的硬件配置如何?根据我的经验,4GB RAM 对于 Intellij Scala 来说不足以良好运行 - 它需要一个大的磁盘缓存(操作系统使用空闲的 RAM),我想。SSD 也有帮助。使用性能监视器或类似工具查看您的操作系统是否是磁盘、CPU 或网络的问题。如果是 CPU,考虑堆大小是否可能是个问题。
您的构建过程是怎样的?有 sbt 插件吗?您的项目有多大?
更新
触发没有更改的完整重建是错误的。您的测试中是否有修改项目目录的内容?如果运行一个无操作的虚拟测试,它会做同样的事情吗?例如,您可能正在将日志写入项目树中。
根据我的有限经验,在 Intellij 中进行 完整 的 Play 构建比纯 Scala 构建慢几个数量级 - 我猜这是因为必须运行所有 SBT 插件(视图编译器、xScript 编译器、xSS 编译器等)。但增量构建并不那么痛苦。
在 OSX 上,请阅读 "Activity Monitor" 以获取 "Performance Monitor"。
更新:
请参见Intellij issue SCL-8235,了解其他人在处理缓慢的增量式Play构建方面的经验和解决方法。投票支持该问题,以提高其优先级并更快地解决该问题。

是的!对于那个描述我很抱歉。我的意思是编译时间。我使用8GB中2012年的Mac电脑,但遗憾的是,它只有5400转/分钟的硬盘驱动器。你是指在Intellij中的SBT插件吗?如果是,我有它们。这个项目是一个微服务,目前处于早期阶段,所以还很小。 - jespeno
实际上,它似乎不是完全重建。如果只修改了一个类,则消息如下(已上传到pastebin):http://pastebin.com/G0WuTPHt - jespeno
@jespeno 阅读、投票、关注:Intellij问题SCL-8235 - Ed Staub
明白了!在注释部分有一些可行的解决方法。我会先尝试使用它们。非常感谢!你能更新你的回答并附上跟踪链接吗?我会将你的回答标记为答案。 - jespeno
@jespeno 已更新。如果有什么适合您的,请回信(也许是一个答案)! - Ed Staub
显示剩余2条评论

0

如果只保留你的测试,而不标记现有的测试怎么样?右键单击测试目录(应该是绿色的),然后选择取消标记为测试源根目录


通常情况下,当我进行重构时,我仍然需要不时地运行所有其他测试(大约每40分钟一次),因此这对我来说不是一个选项 :( - jespeno
你有看过sbt test-only这个功能吗? - Mon Calamari
这是否受 SBT 插件支持?我找不到调整它的选项。此外,根据构建消息,Intellij 14.1 正在使用 Play 编译器来编译源代码。 - jespeno
这是sbt的一个功能,只运行选定的测试。另请参阅sbt test-quick。http://www.scala-sbt.org/0.12.4/docs/Detailed-Topics/Testing.html - Mon Calamari
谢谢提供链接!我尝试从终端运行sbt test。看起来IDE和运行时是一样的。SBT启动需要10-12秒钟。对于小改动,编译只需要1-2秒钟。不过,坏处是,如果我的IDE先编译,运行sbt test将重新编译所有内容(回到IDE后,IDE将再次编译所有内容,以此类推...) - jespeno

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接