在 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 的默认设置(目前)相比,此设置要快得多。希望这对任何人都有帮助。
有没有办法加快 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 的默认设置(目前)相比,此设置要快得多。希望这对任何人都有帮助。