2011年3月21日月曜日

sbt

Scalaの開発環境、Eclipseがいつまでたっても安定してくれないようなので、sbtというのを使ってみる。統合環境ではなく、ビルドとテストを補助する環境で、ここにある。こちらこちらの記事を参考に試してみる。

環境をつくる

空のディレクトリを作って、その中で sbtとうつ。新しいプロジェクトを作るか聞いてくるのでsとするといろいろできる。
$ sbt
Project does not exist, create new project? (y/N/s) s
Getting Scala 2.7.7 ...
:: retrieving :: org.scala-tools.sbt#boot-scala
 confs: [default]
 2 artifacts copied, 0 already retrieved (9911kB/281ms)
Getting org.scala-tools.sbt sbt_2.7.7 0.7.4 ...
:: retrieving :: org.scala-tools.sbt#boot-app
 confs: [default]
 15 artifacts copied, 0 already retrieved (4096kB/385ms)

コンパイルと実行

プログラムは src/main/scala/ 以下に書く。書いて sbt内のプロンプトで、run とやるとコンパイルして実行してくれる。compileだけならコンパイルまで。更新のあったファイルを自動的に検出して依存関係を見て(たぶん)コンパイルするようだ。 さらに ~run, ~compileとすると継続的にファイルを監視して実行してくれる。つまり、書き換えてセーブすると、コンパイルしてくれるてことだ。当然不完全な状況でセーブするとコンパイルエラーがでる。気持ち悪いが馴れか。

Scalaのバージョンを変える

sbt は複数のScalaのバージョンに対応していて、コンパイラを管理してくれる。複数のバージョンに対してクロスビルドすることも可能。ターゲットを変えるには次のようにする。複数指定することも可能らしい。
> set.scala.versions 2.8.1
> reload
こうすると2.8.1のコンパイラをとりに行ってくれる。べんりー。

ライブラリの導入

プロジェクトを設定するとで自動的にmavenのライブラリを取ってきてくれたりする模様。project/以下にbuildというディレクトリを作って、そこに、scalaファイルを書くと、それを自動的にプロジェクトの定義として読むと言う仕掛けらしい。
import sbt._

class MyProject(info: ProjectInfo) extends DefaultProject(info) {
  val scalaTest = "org.scalatest" % "scalatest" % "1.3"
}
で、reload, update とやる。
> reload
[info] Recompiling project definition...
[info]    Source analysis: 1 new/modified, 0 indirectly invalidated, 0 removed.
[info] Building project test 1.0 against Scala 2.8.1
[info]    using MyProject with sbt 0.7.4 and Scala 2.7.7
> update
[info] 
[info] == update ==
[info] downloading http://scala-tools.org/repo-releases/org/scalatest/scalatest/1.3/scalatest-1.3.jar ...
[info]  [SUCCESSFUL ] org.scalatest#scalatest;1.3!scalatest.jar (4751ms)
[info] :: retrieving :: test#test_2.8.1 [sync]
[info]  confs: [compile, runtime, test, provided, system, optional, sources, javadoc]
[info]  1 artifacts copied, 0 already retrieved (1755kB/116ms)
[info] == update ==
[success] Successful.
[info] 
[info] Total time: 8 s, completed Mar 21, 2011 10:41:05 PM
レポジトリから自動的にライブラリをダウンロードしている。すごいなー。

テスト

ScalaTestを入れたのでテストをすることができる。テストプログラムは、src/test/scala/ 以下に書く。 で、sbtのプロンプトからtestとやるとテストが実行されると。

0 件のコメント: