読者です 読者をやめる 読者になる 読者になる

Scalaのためのシンプルなビルドツール SBT

Scala

SBTとは

SBT(simple-build-tool)はScalaのためのシンプルなビルドツールです。google code でホストされています。
http://code.google.com/p/simple-build-tool/

今回はWindows環境にてSBTを使用してみます。現在の最新版である sbt-launch-0.7.3.jar を使用します。

バッチファイルの作成

sbt-launch-0.7.3.jar と同じディレクトリ(パスに日本語が含まれる場合上手くいかないようです)に以下の sbt.bat ファイルを作成します。

set SCRIPT_DIR=%~dp0
java -Xmx512M -jar "%SCRIPT_DIR%sbt-launch-0.7.3.jar" %*

sbt は必要なファイルを自動でダウンロードするため、プロキシ経由の環境では以下のような bat ファイルを作成します。

set SCRIPT_DIR=%~dp0
java -Dhttp.proxyHost=myproxy -Dhttp.proxyPort=8080 -Dhttp.proxyUser=username -Dhttp.proxyPassword=mypassword -Xmx512M -jar "%SCRIPT_DIR%sbt-launch-0.7.3.jar" %*
Unix環境では

プロジェクト用のディレクトリに sbt 起動用のシェルスクリプトを作成します。

java -Xmx512M -jar `dirname $0`/sbt-launch.jar "$@"

実行権限付けときましょう。

$ chmod u+x sbt

プロキシ経由の場合は以下。

java -Dhttp.proxyUser=username -Dhttp.proxyPassword=mypassword -Xmx512M -jar `dirname $0`/sbt-launch.jar "$@"

プロジェクトの作成

コマンドプロンプトにて sbt とバッチファイルを実行します。現在ディレクトリにプロジェクトが見つからない場合 sbt は以下のような出力となり、プロジェクトが作成できます。

Project does not exist, create new project? (y/N/s)

ここでは以下の入力としてプロジェクトを作成しました。

Project does not exist, create new project? (y/N/s) y
Name: etc9.scala
Organization: etc9
Version [1.0]:
Scala version [2.7.7]:
sbt version [0.7.3]:

入力内容の意味は以下です。

  • Name:プロジェクト名を指定します。パッケージ名と scaladocs にて使用されます。
  • Organization:組織名を指定します。(オプションです)
  • Version:プロジェクトのバージョンを指定します。
  • Scala version:利用する Scala のバージョンを指定します。
  • sbt version:利用する sbt のバージョンを指定します。


上記入力が終わると必要なjarなどをダウンロードしに行きます。

Getting Scala 2.7.7 ...
downloading http://repo1.maven.org/maven2/org/scala-lang/scala-compiler/2.7.7/scala-compiler-2.7.7.jar ...
        [SUCCESSFUL ] org.scala-lang#scala-compiler;2.7.7!scala-compiler.jar (20594ms)
〜中略〜
        [SUCCESSFUL ] org.scala-tools.sbt#precompiled-2.8.0.beta1_2.8.0.Beta1;0.7.3!compiler-interface-bin.jar (2188ms)
:: retrieving :: org.scala-tools.sbt#boot-app
        confs: [default]
        15 artifacts copied, 0 already retrieved (4023kB/6234ms)
[success] Successfully initialized directory structure.
[info] Building project etc9.scala 1.0 against Scala 2.7.7
[info]    using sbt.DefaultProject with sbt 0.7.3 and Scala 2.7.7


上記が終了すると、project というディレクトリができます。このディレクトリがプロジェクトとなり、構成はMavenと同様になります。

src/
    main/
      resources/
         メインの jar に含むリソース
      scala/
         メインの Scala ソース
      java/
         メインの Java ソース
    test/
      resources
         テスト jar に含むリソース
      scala/
         テスト用の Scala ソース
      java/
         テスト用の Java ソース

実行

main/scala/ に hw.scala というファイルを作成し、以下のコードとします。

object Hi {
  def main(args: Array[String]) {
    println("Hi!")
  }
}


sbt のプロンプトにて以下を入力すると、ソースのディレクトリを監視して、変更があった場合に自動でコンパイルしてくれます。

> ~ compile
[info]
[info] == compile ==
[info]   Source analysis: 0 new/modified, 0 indirectly invalidated, 0 removed.
[info] Compiling main sources...
[info] Nothing to compile.
[info]   Post-analysis: 2 classes.
[info] == compile ==
[success] Successful.
[info]
[info] Total time: 0 s, completed 2010/04/28 2:46:41
Waiting for source changes... (press enter to interrupt)


今回のような main を含むコンソールアプリの場合は以下のようにすることでコンパイル→実行まで実施してくれます。

> ~ run

その他のアクション

sbtプロンプトにてactionsを指定すると、有効なアクション一覧が得られます。よく使いそうなものを抜粋して載せときます。

>actions
 clean: Deletes all generated files (the target directory).
 compile: Compiles main sources.
 console-quick: Starts the Scala interpreter with the project classes on the classpath without running compile first.
 doc: Generates API documentation for main Scala source files using scaladoc.
 package: Creates a jar file containing main classes and resources.
 release: Compiles, tests, generates documentation, packages, and increments the version.
 run: Runs the main class for the project with the provided arguments.
 test: Runs all tests detected during compilation.
 update: Resolves and retrieves automatically managed dependencies.


webアプリの場合は以下のようなアクションもあったりします。設定についてはまた別の機会に・・

jetty-run
jetty-stop