20
SBT Made Simple @囚千任 - http://afoo.me Monday, September 9, 13

SBT Made Simple

Embed Size (px)

DESCRIPTION

If you think SBT is complex, then you should read this. SBT is really simple as long as you get to know it.

Citation preview

Page 1: SBT Made Simple

SBT Made Simple@囚千任 - http://afoo.me

Monday, September 9, 13

Page 2: SBT Made Simple

Immutability

Monday, September 9, 13

Page 3: SBT Made Simple

Setting

• A Build File is just a sequence of Settings

• A Setting is just a transformation to key-value pairs

• A Transformation to some key-value pair is immutable

Monday, September 9, 13

Page 4: SBT Made Simple

State Transition

• Project State is volatile

• state transition is immutable

Monday, September 9, 13

Page 5: SBT Made Simple

Composition

Monday, September 9, 13

Page 6: SBT Made Simple

Task

• dependency model to composition model

• task composition to form bigger granularity unit

Monday, September 9, 13

Page 7: SBT Made Simple

InputTask

• Task with input

• input validation and completion support with parser

• parser combinator is a form of composition

Monday, September 9, 13

Page 8: SBT Made Simple

Command

• Special InputTask

• accept Project state and settings as input

• project state is driven by a composition of command execution

Monday, September 9, 13

Page 9: SBT Made Simple

Modularity

Monday, September 9, 13

Page 10: SBT Made Simple

Monday, September 9, 13

Page 11: SBT Made Simple

Configuration

• Ivy concept similar to Maven’s Scope

• Predefined or custom Configurations setup Modularity boundary

Monday, September 9, 13

Page 12: SBT Made Simple

Project

• project is another level of modularity

• multiple project build definitions have their specific configuration

Monday, September 9, 13

Page 13: SBT Made Simple

Plugins

• SBT plugin mechanism is another modularity strategy

• enhance reusability too.

Monday, September 9, 13

Page 14: SBT Made Simple

Consistency

One Rule To Rule Them All

Monday, September 9, 13

Page 15: SBT Made Simple

Same Effect?

name := { “hello” + “sbt”}

sbt := { “hello” + “sbt”}

Monday, September 9, 13

Page 16: SBT Made Simple

Not Really!

name := { “hello” + “sbt”}

sbt := { “hello” + “sbt”}

=> Setting[String]

=> Setting[Task[String]]

Monday, September 9, 13

Page 17: SBT Made Simple

Key is the keyval name = settingKey[String](“desc.”)name := { “hello” + “sbt”}

val sbt = taskKey[String](“task desc”)sbt := { “hello” + “sbt”}

=> Setting[String]

=> Setting[Task[String]]

Monday, September 9, 13

Page 18: SBT Made Simple

Key is the key

• SettingKey[T]

• TaskKey[T]

• InputKey[T]

Monday, September 9, 13

Page 19: SBT Made Simple

Demo Time~

Monday, September 9, 13

Page 20: SBT Made Simple

Monday, September 9, 13