Statistical Programming

sbtって別にシンプルじゃないよな。って思うのは他のビルドツールを知らないからなのだろうか。

sbtについてどしっとまとめたことがなかったからちょいとメモる。sbtのダウンロードはHomebrewを使ってちょちょいと出来る。brew install sbt、てな感じで。sbtのプロジェクトを作るにはまずルートディレクトリでsbtコマンドを実行。するとprojectフォルダなどができる。それに加えてbuild.sbtファイルをルートディレクトリ下に作成し名前やバージョン、依存性(ライブラリ)等を書き込むことによってプロジェクトを管理する。以下がルートディレクトリ下のフォルダ構成(srcに対応したbinフォルダも出来上がるし成果物はtargetフォルダ内に入る)

src/
  main/
    resources/
       <リソースファイル>
    scala/
       <scalaソースコード>
    java/
       <javaソースコード>
  test/
    resources
       <テストリソース>
    scala/
       <scalaテストコード>
    java/
       <javaテストコード>
project
       <sbtプロジェクトファイル>
target
       <コンパイルされたクラスファイルなどsbtが自動生成したファイルの出力先>

 よく使うsbtコマンド。

~compile : 保存するたびに自動コンパイルしてくれる。ごっつ便利。

clean : 生成されたファイルをtargetフォルダごと削除

reload : ビルド定義を再読み込みする(ルートディレクトリにある.sbtファイルとprojectディレクトリ下にある.sbtと.scalaファイルが対象)

run : ラン。ラン。ら〜ん。

 update : 依存関係を変更したらしましょ。

test : てすてす。

package : jarファイルを作ってくれる。何これうれしい。

 build.sbtとBuild.scala、どちらを使えば良いのか=>基本的にbuild.sbtで十分。sbtをカスタマイズしたい時はBuild.scalaの方が良い。らしい。build.scalaを書く上で大事なことがいくつか。まず、設定ではキーと値がペア。左がキー。右が値。

name := "i~am~hungry~~~~~project"

次に、それぞれの設定を区切るのは空行。<=これまじでどうにかならんのかな。なんか嫌だ。

 

version := "1.0"

scalaVersion := "2.9.1"

 ライブラリの追加。

 

libraryDependencies += groupID % artifactID % revision
 もし複数同時に追加したいのなら+=ではなく++=を使用する。sbtでは空行が大きな役割を果たすので無駄に空行は入れないようにする。たぶん。revisionはversionみたいなもの。

 

libraryDependencies ++= Seq(
    groupID % artifactID % revision,
    groupID % otherID % otherRevision
) 
テストには必要だけどメインの方には必要ないみたいなライブラリはrevisionの後にに%"test"を追加する

 

groupID % artifactID % revision % "test"

基本的にこれで十分なんだけど全てのパッケージが1つのサーバーに置いているとは限らないのその場合はresolverとやらを追加する必要がある。Eclipseとsbt同時に使いたい場合、projectディレクトリ下にplugins.sbtを作成し、

 

addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "2.4.0")

と書き込むことによってsbtプロジェクトをEclipseでも使うことが出来る。それでも依存性を変更した後とかはEclipseではエラーだけどsbtではエラーじゃないみたいな状況になったりして、そういう時は

clean

reload

update

eclipse 

 を打ったらEclipseの方が勝手にエラーしなくなった。たぶんupdateのおかげ。もしくはeclipse