§SBT クックブック
§play run
周辺のアクションフック
PlayRunHook
を継承することで play run
コマンドにアクションを関連付けることができます。
このトレイトは以下のメソッドを定義します:
beforeStarted(): Unit
afterStarted(addr: InetSocketAddress): Unit
afterStopped(): Unit
beforeStarted
メソッドは play アプリケーションが開始する前、最終的には “before run” タスクが完了した後に呼び出されます。
afterStarted
は play アプリケーションが開始した後に呼び出されます。
afterStopped
は play アプリケーションが終了した後に呼び出されます。
注意: 以下の例では play の実行フックを使ってコマンドを開始そして終了する方法を解説します。
近い将来、sbt-web は SBT ビルドを Grunt と共に実行するより良い方法を提供します。
さて、アプリケーションを開始する前に grunt
で Web アプリケーションをビルドしたいとしましょう。
まず、project/
ディレクトリ内に PlayRunHook
を継承する Scala プロジェクトを作る必要があります。
これを Grunt.scala
という名前にしましょう:
import play.PlayRunHook
import sbt._
object Grunt {
def apply(base: File): PlayRunHook = {
object GruntProcess extends PlayRunHook {
override def beforeStarted(): Unit = {
Process("grunt dist", base).run
}
}
GruntProcess
}
}
それから build.sbt
ファイル内にこのフックを登録する必要があります:
import Grunt._
import play.PlayImport.PlayKeys.playRunHooks
playRunHooks <+= baseDirectory.map(base => Grunt(base))
これにより、アプリケーションの開始前に baseDirectory
で grunt dist
コマンドを実行します。
ここで、grunt watch
コマンドを実行してファイルを監視し、変更が発生したら Web アプリケーションをリビルドしたいと思います:
import play.PlayRunHook
import sbt._
import java.net.InetSocketAddress
object Grunt {
def apply(base: File): PlayRunHook = {
object GruntProcess extends PlayRunHook {
var process: Option[Process] = None
override def beforeStarted(): Unit = {
Process("grunt dist", base).run
}
override def afterStarted(addr: InetSocketAddress): Unit = {
process = Some(Process("grunt watch", base).run)
}
override def afterStopped(): Unit = {
process.map(p => p.destroy())
process = None
}
}
GruntProcess
}
}
アプリケーションが起動するとすぐに grunt watch
を実行して、アプリケーションが停止すると grunt プロセスを終了します。build.sbt
を変更する必要はありません。
§コンパイラオプションの追加
例えば、feature 警告の詳細を得るために feature フラグを追加したいとします:
[info] Compiling 1 Scala source to ~/target/scala-2.10/classes...
[warn] there were 1 feature warnings; re-run with -feature for details
シンプルに scalacOptions
に -feature
を追加します:
scalacOptions += "-feature"
§アセットディレクトリの追加
例えば、pictures
フォルダを追加のアセットディレクトリに含めることができます:
unmanagedResourceDirectories in Assets <+= baseDirectory { _ / "pictures" }
これにより、このフォルダを routes.Assets.at
で使うことができます。
§ドキュメントの無効化
コンパイル速度を向上するために、ドキュメントの生成を無効にすることができます:
sources in (Compile, doc) := Seq.empty
publishArtifact in (Compile, packageDoc) := false
一行目はドキュメントの生成を無効化し、二行目はドキュメント成果物の発行を無効にします。
§ivi ログレベル設定
ivyLoggingLevel
はデフォルトで UpdateLogging.DownloadOnly
に設定されています。この値は以下のように変更することができます:
UpdateLogging.Quiet
はエラーのみ表示しますUpdateLogging.FULL
は最大限のログを表示します
例えばエラーのみ表示したい場合は、以下のように設定します:
ivyLoggingLevel := UpdateLogging.Quiet
§テストのフォークおよび並列実行
デフォルトでは、並列実行は無効化され、フォークが有効になっています。この振る舞いは parallelExecution in Test
および/または fork in Test
と設定して変更することができます:
parallelExecution in Test := true
fork in Test := false
Next: ビルドのデバッグ
このドキュメントの翻訳は Play チームによってメンテナンスされているものではありません。 間違いを見つけた場合、このページのソースコードを ここ で確認することができます。 ドキュメントガイドライン を読んで、お気軽にプルリクエストを送ってください。