在 Intellij 中为 Play Framework 构建测试非常慢

Building tests in Intellij for Play Framework is very slow

有没有办法加快 Intellij 中 Play Framework 单元测试的构建时间?我正在做 TDD。每当我执行测试时,编译大约需要 30 - 60 秒。即使是简单的 Hello World 测试也需要时间。即使没有任何更改,重新运行相同的测试仍将启动 make 过程。

我正在使用 Intellij 14.1,Play 2.3.8,用 Scala 编写。

我已经尝试将 java 编译器设置为 eclipse,还尝试将 Scala 编译器设置为 SBT。

如何取消标记现有测试并只留下您的?右键单击测试目录(应该是绿色的)和 Unmark as Test Source Root.

我假设您知道问题出在构建时间 - 测试本身的实际 运行 时间可以忽略不计。

你有什么硬件?根据我的经验,4GB RAM 不足以让 Intellij Scala 正常运行——我认为它需要一个大磁盘缓存(OS 使用空闲 RAM)。 SSD 也有帮助。使用性能监视器或类似的 OS 来查看时间是磁盘、CPU 还是净时间。如果是 CPU,请考虑堆大小是否有问题。

你的构建过程是怎样的?有sbt插件吗?你的项目有多大?

更新

在没有更改的情况下触发完全重建是错误的。您的测试中是否有某些内容正在修改项目目录?如果你 运行 一个虚拟的无操作测试,它会做同样的事情吗?例如,您是否正在将日志写入项目树?

以我有限的经验,完整 Intellij 下的 Play 构建比纯 Scala 构建慢几个数量级 - 我猜是因为所有 SBT 插件(查看编译器, xScript 编译器、xSS 编译器等)必须 运行。但增量并没有那么痛苦。

在 OSX 上,为 "Performance Monitor" 阅读 "Activity Monitor"。

更新

请参阅 Intellij issue SCL-8235 了解其他人对慢速增量 Play 构建的经验和解决方法。为该问题投票以提高其优先级并更快地解决它。

在 intellij 14.1.2 中,我所做的解决方法是:

1) 从测试中删除 make (Edit Configurations -> Defaults -> Scala Test -> Before launch -> (-) Make)

2) 以 ~ test:compile(例如:activator ~test:compile)或(sbt ~ test:compile

开始 activator(或 play

这可以防止 Intellij 在每次调用 make 时调用播放编译服务器。编译委托给外部 sbt/activator/play 进程来进行连续编译。缺点是,当您 运行 在编译完成之前立即进行测试时,您可能会遇到 NoClassDefinedFound 异常。此外,您还需要监控一个额外的进程。然而,与 Intellij 的默认设置(目前)相比,此设置要快得多。希望这对任何人都有帮助。