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" %*
プロジェクトの作成
コマンドプロンプトにて 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