#contents
*sbt [#ocdab68a]
-Scala プログラムのビルドツール
-http://www.scala-sbt.org/index.html
*sbtプロジェクトの作成 [#d2377b1c]
-前提
--[[Scala Install]] で Scala/Sbt をインストール
--[[Scala Netbeans 8]] で Scala plugin をインストール
-新規プロジェクトの作成で Scala を選べば sbt プロジェクトが作られる
#ref(create_new_project.png)
*sbtプロジェクトのディレクトリ構造 [#d79bc9a0]
#ref(sbt_directory.png)
-ソースコードの配置場所は 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 [#u2640536]
-sbt のバージョンを指定する
&code(plain, https://github.com/kagyuu/ScalaSbtExam/blob/master/project/build.properties);
*plugins.sbt [#j0ec6daf]
-sbt のpluginを指定する
&code(plain, https://github.com/kagyuu/ScalaSbtExam/blob/master/project/plugins.sbt);
指定方法は
addSbtPlugin( "${groupId}" % "${artifactId}" % "${version}")
-公式ドキュメントでは、plugin ごとに sbt ファイルを作る用に書いてあったけど、Netbeans の Scala-plugin は plugins.sbt にまとめる主義らしい
-主要な plugin → http://www.scala-sbt.org/0.13/docs/Community-Plugins.html
*build.sbt [#pfe5f57f]
&code(scala, https://github.com/kagyuu/ScalaSbtExam/blob/master/project/build.sbt);
-Project Settings
--[[sbt.Project>http://www.scala-sbt.org/0.13/api/index.html#sbt.Project]] オブジェクトに key:value の形で設定を追加しているだけ
--設定項目は http://www.scala-sbt.org/0.13/api/index.html#sbt.Keys$
--主な設定項目
|option|type|explanation|h
|organization |String |gropuId|
|name |String |artifactId|
|version |String |version|
|scalaVersion |String |scala version|
|scalaOptions |Seq[String] |scala compiler options|
|javaOptions |Seq[String] |java compiler options|
|resolvers |Seq[Resolver]|Maven repository. (${name} at ${url}) |
|libraryDependencies|Seq[ModuleID]|required library. (${groupId}" % "${artifactId}" % "${version}")|
|&aname(MavenRepo){publishTo};|SettingKey[Option[Resolver]]|publish jar to the Maven repository. cf. http://www.scala-sbt.org/release/docs/Publishing.html |
|&aname(MainClass){mainClass};|String|project main class|
--libraryDependencies で指定するライブラリに scala のバージョンを入れる&br;
scalaVersion := "2.10.4"
のとき
"org.scala-tools" %% "scala-stm" % "0.3"
は、
"org.scala-tools" % "scala-stm_2.10.4" % "0.3"
と同じ
--ローカルにおいた jar を参照したい
lib/
に jar ファイルを置けば、sbt がビルド時に参照してくれる
--演算子
|key := value|key に value を設定する|
|key += value|key に value を追加する|
|key ++= Seq(value1, value2, value3, ...)|key に value1, value2, value3 を追加する|
-Plugin
--plugins.sbt で取得した plugin に対して設定を行う。sbt.Project と同様に key:value 形式のオブジェクトを作る
--scalariformSettings は、compile 時にソースコードの生計を行う plugin
---https://github.com/sbt/sbt-scalariform
---https://github.com/scala-ide/scalariform
*マルチプロジェクト [#f2fa7366]
#code(scala){{{
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 コマンド [#r3aa4ead]
-http://www.scala-sbt.org/0.13/docs/Command-Line-Reference.html
|clean |target/ を削除|
|publishLocal |ローカルのIvyレポジトリに、作成した資産を配布|
|publish |リモートのレポジトリに、作成した資産を配布 cf.[[Mavenレポジトリへの配布>#MavenRepo]]|
|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.[[メインクラスの指定>#MainClass]]|
|runMain <main-class> <argument>*|プロジェクト内の任意のメインクラスを実行する|
|test |テストを実行する|
*2016-07 時点での留意点 [#u29c1d9e]
-sbt 1.3 は scala 2.10 ビルドされている
-scalaVersion := "2.10.4" とする必要がある
--2.11 だとビルドできない
--とくに、auto plugin が初期化でコケる
----
[[Scala]]