ゴール
IDEの力を借りずに、「Hello World!」を出力するCUIプログラムをScalaで書いて、実行できて配布できるファイル形式 jar を作る。
要件
- MacOSX で
brew
コマンドが使える OR もうすでにscala
とsbt
が入っている
Scalaをインストールする
brew update
Scalaが入ってる場合は飛ばしてOK
brew install scala
$ scala -version
Scala code runner version 2.10.0 -- Copyright 2002-2012, LAMP/EPFL
SBT(Simple Build Tool)をインストールする
SBTが入っている場合は飛ばしてOK
brew install sbt
$ sbt --version
sbt launcher version 0.12.2
Hello Worldプロジェクトを作る
おもむろにDesktopにscala_hello_worldプロジェクトを作る:
cd ~/Desktop/
mkdir scala_hello_world
cd scala_hello_world/
sbt
コマンドを実行する:
sbt
いろいろダウンロードされる
exit
と打って抜ける
sbt update
またいろいろダウンロードされる
build.sbt
を作り、下記のように書く。注意として、1行ごとに必ず空行を入れること。
name := "Hello World"
version := "1.0"
scalaVersion := "2.10.0"
SBTでの標準的なディレクトリ構成:
├── project
│ └── target
│ └── config-classes
├── src
│ ├── main
│ │ ├── resources
│ │ └── scala
│ └── test
│ ├── resources
│ └── scala
└── target
とりあえず src
の下だけ作る:
mkdir -p src/{main,test}/{resources,scala}
src/main/scala/
に HelloWorld.scala
を作って、中身を下記のように書く:
object HelloWorld {
def main(args: Array[String]) = {
println("Hello World!")
}
}
実行してみる
sbt run
[info] Set current project to Hello World (in build file:/Users/suin/Desktop/scala_hello_world/)
[info] Compiling 1 Scala source to /Users/suin/Desktop/scala_hello_world/target/scala-2.10/classes...
[info] Running HelloWorld
Hello World!
[success] Total time: 3 s, completed Jul 31, 2013 9:50:45 PM
Hello World! と出ればOK。
jarを作る
sbt-assembly というSBTのプラグインを使うと楽との情報を得たので使ってみる。ここに書いたセットアップ方法は sbt-assembly 0.9.2 のREADMEから持ってきたものなので、最新の情報はリンク先を参照してほしい。
project/plugins.sbt
を作り、下記を追加する:
addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.9.1")
build.sbt
に下の2行を追加する:
import AssemblyKeys._ // put this at the top of the file
assemblySettings
さっそく jar を作ってみる:
sbt assembly
jar を実行してみる:
java -jar target/scala-2.10/Hello\ World-assembly-1.0.jar
下のようにHello World!とだけ出れば成功。
Hello World!
jar のファイル名を hello_world.jar
に変えたいので、build.sbt
に設定を追加する:
jarName in assembly := "hello_world.jar"
jar を作りなおしてみる:
sbt assembly
実行してみる:
java -jar target/scala-2.10/hello_world.jar
Hello World!
hello_world-X.X.jar
のようにバージョンつけたいので、 build.sbt
の jarName in assembly
の設定を次のようにかえる。(もっとシンプルに書けるのかもしれないので知っていたら教えてほしい。)
jarName in assembly <<= (version) map { (version) => "hello_world-" + version + ".jar" }
jar を作り直して実行する:
sbt assembly
java -jar target/scala-2.10/hello_world-1.0.jar