sbt  †
sbtプロジェクトの作成  †
- 前提
- 新規プロジェクトの作成で Scala を選べば sbt プロジェクトが作られる
sbtプロジェクトのディレクトリ構造  †
- ソースコードの配置場所は Maven に準ずる
| src/main/java | ソースコード |  | src/main/scala | ソースコード |  | src/main/resources | 設定ファイルやアイコン画像など |  | src/test/java | テストコード |  | src/test/scala | テストコード |  | src/test/resources | テストデータなど |  
 
- 設定ファイルは project/ に配置
| Build.scala | ビルドスクリプト(旧式の記述方法) → 削除する |  | build.sbt.template | ビルドスクリプト(現行の記述方法) → build.sbt にリネームする |  | build.properties | sbt の バージョン指定 |  | plugins.sbt | sbt の plugin 指定 |  
 
build.properties  †
- sbt のバージョンを指定する
sbt.version=0.13.5
 
plugins.sbt  †
build.sbt  †
import scalariform.formatter.preferences._
lazy val root = (project in file(".")).
  settings(commonSettings: _*).
  settings(
    name := "SampleProject",
    libraryDependencies ++= Seq()
  )
lazy val commonSettings = Seq(
  organization := "your.organization",
  version := "0.1.0",
  // build.sbt supports 2.10.x only due to scalariform version. Use Build.scala for 2.11.x
  scalaVersion := "2.10.4",
  scalacOptions ++= Seq("-unchecked", "-deprecation"),
  javacOptions ++= Seq("-source", "1.6", "-target", "1.6"),
  resolvers ++= Seq(
    "Sonatype OSS Releases" at "https://oss.sonatype.org/content/repositories/releases",
    "Sonatype OSS Snapshots" at "https://oss.sonatype.org/content/repositories/snapshots",
    "Typesafe Releases" at "http://repo.typesafe.com/typesafe/releases/"
  )
)
// scalariform code format settings
scalariformSettings // enable scalariformSettings
ScalariformKeys.preferences := ScalariformKeys.preferences.value
  .setPreference(RewriteArrowSymbols, false)
  .setPreference(AlignParameters, true)
  .setPreference(AlignSingleLineCaseStatements, true)
  .setPreference(DoubleIndentClassDeclaration, true)
  .setPreference(IndentSpaces, 2)
- Project Settings
- Plugin
- plugins.sbt で取得した plugin に対して設定を行う。sbt.Project と同様に key:value 形式のオブジェクトを作る
- scalariformSettings は、compile 時にソースコードの生計を行う plugin
 
マルチプロジェクト  †
lazy val commonSettings = Seq(
  organization := "com.example",
  version := "0.1.0",
  scalaVersion := "2.11.7"
  )
lazy val root = (project in file(".")).
  aggregate(util, core)
lazy val core = (project in file("core")).
  settings(commonSettings: _*).
  settings(
  // other settings
  name := "SampleCore",
  )
lazy val util = (project in file("util")).
  settings(commonSettings: _*).
  settings(
  // other settings
  name := "SampleUtil",
  ).
  dependsOn(core)
- ディレクトリごとに sbt.Project オブジェクトを作る
- root プロジェクトが util, core を aggreaget しているので、root で sbt が動くと core と util がビルドされる
- util.dependsOn(core) で、util プロジェクトは core プロジェクトの成果物に依存させる
- 共通的な設定は commonSettings に定義 (Netbeasn で生成された単一プロジェクトの sbt にcommonsSettings があったけど、マルチプロジェクトに行きやすくするためだったのね
sbt コマンド  †
- http://www.scala-sbt.org/0.13/docs/Command-Line-Reference.html
| clean | target/ を削除 |  | publishLocal | ローカルのIvyレポジトリに、作成した資産を配布 |  | publish | リモートのレポジトリに、作成した資産を配布 cf.Mavenレポジトリへの配布 |  | udpate | 依存ライブラリを更新 |  | compile | src/main/scala、src/main/java 配下のソースコードをコンパイルする |  | console | コンパイル済み資産を Classpath に加えて sbt コンソールを起動。終了 Ctrl+D(Unix) Ctrl+Z(Windows) |  | package | src/main/scala、src/main/java、src/main/resources → jar |  | packageDoc | src/main/scala → doc jar |  | packageSrc | src/main/scala → src jar |  | run <argument>* | プロジェクトのメインクラスを実行する cf.メインクラスの指定 |  | runMain <main-class> <argument>* | プロジェクト内の任意のメインクラスを実行する |  | test | テストを実行する |  
 
2016-07 時点での留意点  †
- sbt 1.3 は scala 2.10 ビルドされている
- scalaVersion := "2.10.4" とする必要がある
- 2.11 だとビルドできない
- とくに、auto plugin が初期化でコケる
 
Scala