sbtマルチプロジェクトビルドの使いどころ
DESCRIPTION
Scala勉強会で5分くらいのお時間もらって発表した内容。TRANSCRIPT
sbtマルチプロジェクトビルドの使いどころ
原 一浩 @kara_d
sbtは複数のプロジェクトを管理可能➡ sbtのマルチプロジェクトビルド• http://scalajp.github.com/sbt-getting-started-guide-ja/multi-project/
•
3
import sbt._import Keys._
object HelloBuild extends Build { lazy val root = Project(id = "hello", base = file(".")) aggregate(foo)
lazy val foo = Project(id = "hello-‐foo", base = file("foo"))}
どういう場面で使うのか?➡ Play frameworkでプラグインを作成する場合で考えてみる• よくある構成
➡ 架空のLogプラグイン• model/log.(scala/java)でログの保存• $ view-log でログの確認を可能にしたい
➡ 普通は、Playプラグインとsbtプラグイン作成• リポジトリをどうする?• 配布はどうしよう?
4
サブアプリケーション + コンソールサポート
Play Logプラグイン(架空)のフォルダ構成➡ app• model- log
➡ sbt-plugin-1• src- main
scala
➡ sbt-plugin-2➡ project• Build.scala
5
プラグインアプリケーション
プラグインコンソール
デフォルトのPlayのBuild.scala
➡ これを、こんな風にするだけ。
6
val main = PlayProject(appName, appVersion, appDependencies, mainLang = SCALA).settings( // Add your own project settings here
)
デフォルトのBuild.scalaを変更
➡ あとは、それぞれのプラグイン情報を書くだけ
7
val main = PlayProject(appName, appVersion, appDependencies, mainLang = SCALA).settings( // Add your own project settings here
).aggregate(sbtプラグイン1, sbtプラグイン2)
lazy val sbtプラグイン1 = Project(
プロジェクト名, ソースフォルダの場所, 各種設定)
メリット➡ Playコンソール上でpublish-local or publish一発ビルド
➡ Playコマンドで作成したプロジェクトフォルダ内で完結するためリポジトリが1個で済む
➡ Play内の情報を連携できる(settingsがPlayと共通)➡ その他、各クラスの共通化
8
ありがとうございました
9
7/14 第3回playframework勉強会http://playframeworkja.doorkeeper.jp/events/1231-%E7%AC%AC3%E5%9B%9Eplayframework%E5%8B%89%E5%BC%B7%E4%BC%9A-play_ja
日本Play frameworkユーザー会https://groups.google.com/group/play_ja?hl=ja