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