sgykfjsm.github.com

sbtから起動させる処理にコマンドラインから引数を渡す

以下はskinny frameworkをつかって処理を書いているが、sbtからの起動させる際にはskinny frameworkを使ってるかどうかは関係ないはず。

こんな処理を書いたとする。

1
2
3
4
5
6
7
8
9
10
11
package batch

object MyBatch extends skinny.logging.Logging with App {
  def runMain(params:List[String]): Unit = {
    logger.info("start")
    params foreach println
    logger.info("end")
  }

  runMain(args.toList)
}

その場合、以下の様に起動させれば良い。

1
2
3
4
5
6
7
8
9
10
$ ./sbt "run-main batch.MyBatch foo bar"
[info] Loading project definition from /Users/sgyk/local/script/scala/skinny-blank-app/project
[info] Set current project to skinny-blank-app-dev (in build file:/Users/sgyk/local/script/scala/skinny-blank-app/)
[info] Generating /Users/sgyk/local/script/scala/skinny-blank-app/target/dev/scala-2.11/resource_managed/main/rebel.xml.
[info] Running batch.MyBatch foo bar
2014-11-14 18:43:44.985  INFO   --- [     run-main-0] batch.MyBatch$                           : start
foo
bar
2014-11-14 18:43:45.005  INFO   --- [     run-main-0] batch.MyBatch$                           : end
[success] Total time: 1 s, completed 2014/11/14 18:43:45

run-main ${package-name}.${class-name} arg1 arg2 …といった感じ。