sbtでCommandを呼び出すCommandを定義する
sbtでandroid開発をしていると~;android:package-debug;android:start-deviceみたいなコマンドをよく使うと思います。(たぶん
コンパイルから実機へのインストールまで一気にやってくれるので便利なのですが、コマンドが長いので打つのが面倒です。
そこでaliasっぽく上記のコマンドを呼び出すコマンドを新たに定義してみます。
既存コマンドを呼び出す
既存のコマンドを呼び出すにはCommand.processを使います。
コマンド名とstateを引数にとり、そのコマンドを実行してくれます。
def process (command: String, state: State): State
コマンドを定義する
Command.processを使用する新しいコマンドを定義するためにCommand.commandを使います。
例えば、冒頭のandroid:package〜を呼び出すコマンドandroidStartDeviceはこんな感じになります。
def androidStartDevice = Command.command("androidStartDevice") { state => Command.process("android:package-debug", state) Command.process("android:start-device", state) }
full configurationの設定ファイルに書く
Build.scalaなどの設定ファイルで定義したcommandをcommandsに追加してやればOKです。
lazy val root = Project ( id = "root", base = file("."), settings = Defaults.defaultSettings ++ Seq ( commands ++= Seq ( androidStartDevice ) ) ) def androidStartDevice = Command.command("androidStartDevice") { state => Command.process("reload", state) Command.process("android:package-debug", state) Command.process("android:start-device", state) }
あとはsbtのコンソールから定義したコマンドを呼べばよいです。
勝手に補完も効いてくれます。
% sbt
> ~androidStartDevice
こちらを参考にさせて頂きました。