以前から使ってはいたのですが、CentOSからUbuntuに移行した時に残念ながらsbtの設定は吹っ飛んでしまったため、いい機会なのでまとめておこうと思います。
sbt(Simple Build Tool)
https://github.com/harrah/xsbt/wiki
sbtは、Scalaのための開発ツールです。Javaの世界でいくとMavenに近いと思われるのですが、MavenのようにXMLしていないので、導入はもうちょっと簡単かも。
sbtは0.7系と0.10系があり、世の中の情報は0.7系を中心に書かれていますが、今回はせっかくなので0.10系にトライしてみましょう。
では、手順を見ながらセットアップ!
https://github.com/harrah/xsbt/wiki/Setup
上記ページから、「sbt-launch.jar」をダウンロードしてきて、適当なディレクトリに配置します。配置したら、同じディレクトリに「sbt」という名前のスクリプトを作成します。内容は、以下です。
$ cat sbt java -Xmx512M -jar `dirname $0`/sbt-launch.jar "$@"
※なお、sbt-launch.jarとsbtスクリプトは、プロジェクトディレクトリ内に配置するのが本来正しいっぽいですね
Mavenと同じようにインターネット越しにファイルをダウンロードしようとしてくるので、ネットワークにつながっている必要があります。プロキシ越しにアクセスしなければならない場合は、以下のようにシステムプロパティを利用するらしいです。
java -Dhttp.proxyHost=myproxy -Dhttp.proxyPort=8080 -Xmx512M -jar `dirname $0`/sbt-launch.jar "$@"
実行権限も付与しておきましょう。当方、sbtは/usr/localに配置しているため、sudoが付いています。
$ sudo chmod a+x sbt
あとは、できたスクリプトにPATHを通しておきましょうね。
export SBT_HOME=/usr/local/sbt PATH=${SBT_HOME}:${PATH}
では、さっそく使ってみます。作業対象のディレクトリを作成、移動した上で、「sbt」とタイプ。
$ mkdir hello $ cd hello/ $ sbt Getting net.java.dev.jna jna 3.2.3 ... downloading http://repo1.maven.org/maven2/net/java/dev/jna/jna/3.2.3/jna-3.2.3.jar ... [SUCCESSFUL ] net.java.dev.jna#jna;3.2.3!jna.jar (3807ms) :: retrieving :: org.scala-tools.sbt#boot-app confs: [default] 1 artifacts copied, 0 already retrieved (838kB/28ms) Getting Scala 2.8.1 (for sbt)... downloading http://repo1.maven.org/maven2/org/scala-lang/scala-compiler/2.8.1/scala-compiler-2.8.1.jar ... [SUCCESSFUL ] org.scala-lang#scala-compiler;2.8.1!scala-compiler.jar (8049ms) downloading http://repo1.maven.org/maven2/org/scala-lang/scala-library/2.8.1/scala-library-2.8.1.jar ... [SUCCESSFUL ] org.scala-lang#scala-library;2.8.1!scala-library.jar (5290ms) downloading http://repo1.maven.org/maven2/jline/jline/0.9.91/jline-0.9.91.jar ... [SUCCESSFUL ] jline#jline;0.9.91!jline.jar (958ms) downloading file:/xxxxx/.m2/repository/junit/junit/3.8.1/junit-3.8.1.jar ... [SUCCESSFUL ] junit#junit;3.8.1!junit.jar (18ms) :: retrieving :: org.scala-tools.sbt#boot-scala confs: [default] 4 artifacts copied, 0 already retrieved (15296kB/149ms) Getting org.scala-tools.sbt sbt_2.8.1 0.10.0 ... …省略… [info] Set current project to default (in build file:/xxxxx/hello/) >
初回は、Mavenがごとく鬼のようにダウンロードが行われるので、しばらく待ちましょう。
Set current project to default >
これが出てきたら、一旦終了。
> exit
sbt 0.10からは、build.sbtがけっこう変わったのね…。サンプルを見ながら、build.sbtを作成します。
$ emacs build.sbt & $ cat build.sbt name := "Hello" version := "1.0" scalaVersion := "2.9.0"
各項目の間に空行がありますが、これがないとエラーになるようなので要注意です。あと、Scalaのバージョンに2.9.0-1を指定すると、リポジトリに無いと言われエラーになります。とりあえず今回は2.9.0を指定しました。大丈夫か?
再びsbtを実行。
$ sbt Getting Scala 2.9.0 ... downloading http://repo1.maven.org/maven2/org/scala-lang/scala-compiler/2.9.0/scala-compiler-2.9.0.jar ... [SUCCESSFUL ] org.scala-lang#scala-compiler;2.9.0!scala-compiler.jar (11981ms) downloading http://repo1.maven.org/maven2/org/scala-lang/scala-library/2.9.0/scala-library-2.9.0.jar ... [SUCCESSFUL ] org.scala-lang#scala-library;2.9.0!scala-library.jar (10270ms) downloading http://repo1.maven.org/maven2/org/scala-lang/jline/2.9.0/jline-2.9.0.jar ... [SUCCESSFUL ] org.scala-lang#jline;2.9.0!jline.jar (953ms) downloading http://repo1.maven.org/maven2/org/fusesource/jansi/jansi/1.4/jansi-1.4.jar ... [SUCCESSFUL ] org.fusesource.jansi#jansi;1.4!jansi.jar (992ms) :: retrieving :: org.scala-tools.sbt#boot-scala confs: [default] 4 artifacts copied, 0 already retrieved (20442kB/177ms) [info] Set current project to default (in build file:/xxxxx/hello/)
Scala 2.9.0をダウンロードしてきた模様です。
で?ここまでやって、helloディレクトリの配下は以下のようになっています。
hello$ ll 合計 20 drwxr-xr-x 4 xxxxx xxxxx 4096 2011-07-10 18:55 ./ drwxr-xr-x 3 xxxxx xxxxx 4096 2011-07-10 18:36 ../ -rw-r--r-- 1 xxxxx xxxxx 58 2011-07-10 18:54 build.sbt drwxr-xr-x 4 xxxxx xxxxx 4096 2011-07-10 18:37 project/ drwxr-xr-x 5 xxxxx xxxxx 4096 2011-07-10 18:51 target/
…srcとかはどこに行った?う〜ん、何か手順が悪かったのかなぁ??
とりあえず、手で作ってみますか。
$ mkdir -p src/main/scala $ cat src/main/scala/HelloSbt.scala object HelloSbt { def main(args: Array[String]): Unit = { println("Hello World") } }
では、試してみます。
$ sbt [info] Set current project to default (in build file:/xxxxx/hello/) > compile [info] Updating... [info] Done updating. [info] Compiling 1 Scala source to /xxxxx/hello/target/scala-2.9.0.final/classes... [success] Total time: 8 s, completed Jul 10, 2011 6:57:33 PM > run [info] Running HelloSbt Hello World [success] Total time: 0 s, completed Jul 10, 2011 6:57:35 PM
動きおった…。これでいいのかなぁ?何かが間違っている気がするんですが。
なお、Mavenではダウンロードしてきたファイルとかは.m2ディレクトリに置かれて
いましたが、sbtはIvyを利用しているらしく、ホームディレクトリの配下に.ivy2が
できています。ご注意を。