sbt 0.11でSWTを使う

sbt 0.11でSWTを使う方法(たぶん0.10系も同じ)。ググって出てきたのが0.7系の情報ばかりではまった…。

とりあえずlibの下にswt.jarを配置。

build.sbtに以下を記述。これがないと2回目のrunでこける。

fork in run := true

Macの場合はjava起動時に"-XstartOnFirstThread"が必要となる。Macでだけ動けばいいならbuild.sbtに以下を記述。(0.7系の場合はrunJVMOptionsらしい。)

javaOptions in run += "-XstartOnFirstThread"

"-XstartOnFirstThread"は非Mac環境ではエラーになるので、他環境でも動かしたい場合はproject/Build.scalaなどでMacの場合だけオプションが足されるように記述。

import sbt._
import Keys._

object HogeBuild extends Build {

  lazy val root = Project(
    id = "", // set in build.sbt
    base = file("."),
    settings = rootSettings
  )

  def rootSettings = {
      if (isMacOSX)
        Defaults.defaultSettings ++ Seq (javaOptions in run += "-XstartOnFirstThread")
      else
        Defaults.defaultSettings
  }

  def isMacOSX: Boolean = {
    val name = System.getProperty("os.name")
    name != null && name.contains("Mac")
  }

}

たぶん妥当な書き方ではないのだろうけど、とりあえず手元のUbuntuMacで動いた。