sbt の multi-project 構成で xsbt-start-script-plugin を使う。
sbtでmulti-projectしたときstart-scriptどうしたらいいんだろう。sbt 'project foo' 'run' 相当のことをやりたい。
と思ったのですが、やってみたらすんなりできてしまいました。
// project/plugins.sbt resolvers += Classpaths.typesafeResolver addSbtPlugin("com.typesafe.startscript" % "xsbt-start-script-plugin" % "0.5.0")
// project/ScalaProject.scala import sbt._ import sbt.Keys._ import com.typesafe.startscript.StartScriptPlugin object ScalaProjectBuild extends Build { lazy val utils = Project( id = "utils", base = file("utils"), settings = Defaults.defaultSettings ++ Seq( ) ) lazy val hello = Project( id = "hello", base = file("hello"), settings = Defaults.defaultSettings ++ StartScriptPlugin.startScriptForClassesSettings ) aggregate (utils) dependsOn (utils) lazy val root = Project( id = "root", base = file("."), settings = Defaults.defaultSettings ++ StartScriptPlugin.startScriptForClassesSettings ++ Seq( ) ) aggregate (utils, hello) }
このように、start-script を作りたいプロジェクトにだけ start-script の設定をして、
rootプロジェクトなりそのプロジェクトなりで stage すれば良いだけです。
実行は project root (subdirectoryではなく) で
./hello/target/start
のようにすればOK。
補足
aggregate していると、stage したくないとこでも stage しちゃって良くないこともあるので、
そういうときは
StartScriptPlugin.stage in Compile := Unit
って書けって、READMEに書いてありました。