IDEAからsbt-appengineを起動し、デバッグする

IDEA と sbt を連携してデバッグしたいと思っていたところ@pomu0325 さんが解決してくれた。 だけど、appengine の起動は sbt コンソールに dev-appserver-start と入力しなくてはならず、面倒。 どうせなら、IDEA のデバッグ時に一緒に appserver も起動して欲しい。 これを解決する方法がわかったので、紹介。

まずは pomu0325 さんのところにも記述があるように "Before launch" の "Run SBT Action" に "dev-appserver-start" を指定する。 このまま IDEA から実行しても appserver は起動するんだけど、dev-appserver-start を実行直後に IDEA が接続に行くらしく、コネクションが張れずにエラーとなってしまう。 ということは、コネクションを張るタイミングを遅らせてあげればいいはず。

MyProject/project/build/Project.scala に以下を追記。

override def devAppserverStartTask(args:Seq[String]) = task {
    val status = devAppserverInstance(args)
    Thread.sleep(5000)
    status
}

これによって dev-appserver-start を実行後、5 秒(5000ms)スリープする。 この 5 秒というのは各自のマシンスペックと相談して、適当に変更してください。

あとは sbt で reload 後、IDEA でデバッグするだけ。 appserver 起動後に IDEA がコネクションを張りに行くはずです。

余談だけど、こんな記述をしておくとちょっと楽できるかも?

lazy val start = devAppserverStartAction
lazy val stop = devAppserverStop

sbt で dev-appserver-start のエイリアスとして start を定義してます。同様に stop も。 appserver の起動は IDEA から可能だけど、sbt の appserver を停止するときに stop が役立つかも?