Scala/sbt/Scalaプロジェクトをビルドしてみる

Scala/sbt/Scalaプロジェクトをビルドしてみる

ディレクトリ構成

公式のチュートリアルを見たところ、Getting Started with sbt — Directory structure

このような構成にしとかないといけないと。そんでこれは Maven と同じだよと。

src/
  main/
    resources/
       <files to include in main jar here>
    scala/
       <main Scala sources>
    java/
       <main Java sources>
  test/
    resources
       <files to include in test jar here>
    scala/
       <test Scala sources>
    java/
       <test Java sources>

この構成を全部素手でまず作ってみる

$ mkdir src
$ cd src
$ mkdir main
$ mkdir test
$ cd main/
$ mkdir resources
$ mkdir java
$ mkdir scala
$ cd ..
$ cd test
$ mkdir resources
$ mkdir java
$ mkdir scala

こうなった

src
├── main
│   ├── java
│   ├── resources
│   └── scala
└── test
    ├── java
    ├── resources
    └── scala

エントリポイントを作る

つまり動くところを作る

適当にパッケージを作って

src
├── main
│   ├── java
│   ├── resources
│   └── scala
│       └── jp
│           └── co
│               └── sample
│                   └── hogehoge
│                       └── Main.scala
└── test
    ├── java
    ├── resources
    └── scala

このような構成にする。

Main.scala は

package jp.co.sample.hogehoge
 
object Main {
  def main(args:Array[String]) = {
    println("hogehoge")
  }
}

こんな感じで・・・

実行する

何もなしでプロジェクトのルートディレクトリでおもむろに

$ sbt run
...
[info] Running jp.co.sample.hogehoge.Main 
hogehoge

動いた。ディレクトリには勝手に target というディレクトリが作成されている。ここにコンパイル結果が格納されるようだ

ビルド定義の作成

ビルドの定義ファイルを作成する。 Maven ならば書くのがクソややこしい pom ファイルにあたるのだろう

チュートリアルを読むとプロジェクトのルートに build.sbt を作る。 中にとりあえず

lazy val root = (project in file(".")).
  settings(
    name := "hogehoge",
    version := "1.0",
    scalaVersion := "2.11.4"
  )

このように書く。どう見ても設定ファイルじゃなくて設定ファイル風の Scala コードである。

再び実行してみる

$ sbt run

そうすると scalaVersion を指定したせいか、このバージョンの Scala コンパイラ を自動ダウンロードしてきている。 コンパイルされて、実行OK

では微妙にバージョンを変えてみる

lazy val root = (project in file(".")).
  settings(
    name := "hogehoge",
    version := "1.0",
    scalaVersion := "2.11.7"
  )

再び実行してみる

$ sbt run

やはり指定したバージョンのコンパイラをダウンロードしにいく。これはスゴイ。

build.sbt の設定を書いて実行するとプロジェクトのルートディレクトリに project という名前のディレクトリが勝手に出来上がる

使用する sbt のバージョンを指定する

build.sbt で出来上がった project ディレクトリの中に build.properties というファイルを作る

中にこのように書いてビルドに使用する sbt 自体のバージョンを指定する

sbt.version=0.13.9

動かしてみる

$ sbt run

普通に動いた。ではバージョンを微妙に戻してみる

sbt.version=0.13.7

何やら取りに行っているようだ。

$ sbt run
Getting org.scala-sbt sbt 0.13.7 ...

正しく実行された。

バージョン戻してもう一度実行してみる。今度はダウンロード済なのでサラリと終わる。

コンパイルだけする

実行しないでコンパイルだけしてみる

$ sbt compile

できた。

今までイロイロビルドして何かイロイロ出来上がってきてたので今一度

├── build.sbt
├── project
│   └── build.properties
└── src
    ├── main
    │   ├── java
    │   ├── resources
    │   └── scala
    │       └── jp
    │           └── co
    │               └── sample
    │                   └── hogehoge
    │                       └── Main.scala
    └── test
        ├── java
        ├── resources
        └── scala

この状態からコンパイルしてみる OK、target と project/target が出来上がることを確認

scala/sbt/build_scala_project.txt · 最終更新: 2015-08-27 17:33 by ore