Skip to main content

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

· 3 min read

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が役立つかも?