- sbt, a build tool for Scala
- https://github.com/harrah/xsbt
以下の2つのファイルが必要になります。
sbt-launch.jar
sbt-launch.jar
を起動するシェルスクリプト =sbt
コマンド
sbt-launch.jar
は typesafe のリポジトリ から取得します。
% curl -LO "http://typesafe.artifactoryonline.com/typesafe/ivy-releases/org.scala-sbt/sbt-launch/0.11.3-2/sbt-launch.jar"
同ディレクトリに、以下のシェルスクリプトで sbt-launch.jar
を起動する sbt
コマンドを作成します。
#!/bin/sh
java -Xms512M -Xmx1536M -Xss1M -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=384M -jar `dirname $0`/sbt-launch.jar "$@"
32bit OS で JavaVM のメモリ制限にかかる場合は -Xmx (ヒープの最大サイズ) を下げます。
java -Xms512M -Xmx1024M -Xss1M -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=384M -jar `dirname $0`/sbt-launch.jar "$@"
作成した sbt
コマンドにパスを通しておきます。以下の例では ~/.sbt/bin
に設置しています。
% vi ~/.bash_profile
...
export PATH=~/.sbt/bin:${PATH}
...
% source ~/.bash_profile
% which sbt
~/.sbt/bin/sbt
以下の構成でファイル/ディレクトリをあらかじめ作成します
- buid.sbt
- project/build.properties
- src/main/java/
- src/main/scala/
- src/main/resources/
- src/test/java/
- src/test/scala/
- src/test/resources/
- lib/
build.sbt
にプロジェクトの情報を記載しておきます。
name := "sandbox"
version := "1.0"
scalaVersion := "2.9.1"
project/build.properties
に sbt の情報を記載しておきます。
sbt.version=0.11.3
ソースは src/main/(java|scala)
に置きます。src/main/scala/Sandbox.scala
を作成してみます。
object Sandbox {
def main(args:Array[String]) {
println("Hello World")
}
}
プロジェクトディレクトリ直下で sbt
コマンドを実行するとインタラクティブモードでコンソールが立ち上がります。初回起動時は必要なパッケージがダウンロードされます。
% cd /path/to/sbt/project/sandbox
% sbt
...
[info] Done updating.
[info] Set current project to sandbox (in build file:...)
>
run
でコンパイルが行われ main ブロックが実行されます。
> run
[info] Compiling 1 Scala source to ...
[info] Running Sandbox
[success] Total time: ....
Hello World
compile
でコンパイルのみ行われます。先頭に ~
を付けるとファイル更新を検知して、自動でコンパイルしてくれます。
> ~compile
1. Waiting for source changes... (press enter to interrupt)
lib/
sbt
で管理しない jar パッケージは、lib/
に置いておきます。自動で -classpath
を通してくれます。
src/main/resources
データファイル関連は src/main/resources
に置きます。
src/main/resources/sandbox.properties
を読み込む src/main/scala/Sandbox.scala
のサンプルコードです。
import java.io.FileInputStream
import java.util.Properties
import scala.collection.JavaConversions._
object Sandbox {
def main(args:Array[String]) {
val prop = new Properties()
prop.load(getClass().getResourceAsStream("/sandbox.properties"))
prop.stringPropertyNames().foreach { key =>
println(prop.getProperty(key))
}
}
}