当我创建一个新的 Play 2.1 项目时,Intellij Idea 坚持只调试项目配置文件。也就是说,./project/Build.scala 中的行,没有其他文件。
我如何告诉 Idea 在 ./app/ 中调试东西?
我已经像这样生成了 Idea 项目文件:([project-name] $ idea with-sources=yes
在 Play 的控制台中)。
(我不记得以前在 Play 2.0 或更早版本的 2.1 中发生过这种情况)
当我创建一个新的 Play 2.1 项目时,Intellij Idea 坚持只调试项目配置文件。也就是说,./project/Build.scala 中的行,没有其他文件。
我如何告诉 Idea 在 ./app/ 中调试东西?
我已经像这样生成了 Idea 项目文件:([project-name] $ idea with-sources=yes
在 Play 的控制台中)。
(我不记得以前在 Play 2.0 或更早版本的 2.1 中发生过这种情况)
这个问题有两个原因:一个“有趣”和一个愚蠢。
有趣的原因:
Play 2.1 和 SBT 似乎分叉测试(因此在单独的进程中运行它们)。因此,我的单元测试代码中的断点从未被命中。
“修复”此问题的一种方法是添加此配置设置:
Keys.fork in Test := false
愚蠢的原因:
我还没有在新项目中编译任何“真正的”源代码文件。因此,Idea 从未在这些行上激活断点。但是项目配置Build.scala文件我认为是在我启动Play的SBT控制台时编译的,所以Idea直接在Build.scala中激活了断点。— 所以实际上从来没有问题:我只需要run
在 Play 控制台中点击,然后断点就会生效(在 Play 编译了我的源代码之后)。
我正在运行 Intellij,在端口 9999 1 上进行远程调试。~apatzer> 播放调试 2。然后在 Intellij 3 中启动我的远程配置。[playproject] $ run ==> 成功地打断点和调试。
由于分叉,我无法在任何测试中达到断点。例如: [playproject] $ test-only com.mydomain.pkg.MyTest ==> FAIL 不同的进程。IDE 中未命中断点。
这是有效的:
import sbt._
import Keys._
import play.Project._
object MyBuild extends Build {
...
lazy val main = play.Project(appName, appVersion, appDependencies).settings(
Keys.fork in testOnly := false,
libraryDependencies ++= deps,
...