SlideShare a Scribd company logo
1 of 18
SBT <<= (Build) { FTW }
        @indrajitr
SBT
• Build tool on Scala for building Scala-Java projects

• Compliant with Maven's convention (mostly)

• Basics done right

• Easy to set up for simple projects (intrusive)

• Shares a *lot* with Scala




                                 Bay Area Scala Enthusiasts Meeting #42 (10-10-11)
Build Definitions
• Simple: Quick DSL

• Diabolical: Scala code (with embedded DSL)

• And the shell rocks




                              Bay Area Scala Enthusiasts Meeting #42 (10-10-11)
Build Definitions
<base>/*.sbt

<base>/project/*.scala

<base>/project/plugins.sbt

<base>/project/plugins/*.(scala|sbt)

~/.sbt/plugins/*.(scala|sbt)




                          Bay Area Scala Enthusiasts Meeting #42 (10-10-11)
build.sbt
organization := "net.liftweb"

name       := "lift-demo"

version    := "1.0"

scalaVersion := "2.9.1"

libraryDependencies ++=

  Seq("net.liftweb" %% "lift-webkit" % "2.4-M4",

 "org.eclipse.jetty" % "jetty-webapp" % "7.3.0.v20110203" % "jetty")
                            Bay Area Scala Enthusiasts Meeting #42 (10-10-11)
project/build.scala
import sbt._

object LiftBuild extends Build {

    lazy val projects: Seq[ProjectReference] = Seq(common, actor, json)

    lazy val framework = Project("lift-framework", file(".")).aggregate(projects)

    lazy val common = Project(“lift-common”, file(“core/common”)).settings(/*...*/)

    lazy val actor = Project(“lift-actor”, file(“core/actor”)).dependsOn(common).settings(/*...*/)

    lazy val json = Project("lift-json", file("core/json")) dependsOn(common % "test")

    //lazy val foo = Project("lift-foo", file("core/foo"), delegates = common :: Nil)

}

                                        Bay Area Scala Enthusiasts Meeting #42 (10-10-11)
The Expression
Reminder:

Statement ≠ Expression

  Statement:

    val foo = bar + baz

  Expression:

    bar + baz


                          Bay Area Scala Enthusiasts Meeting #42 (10-10-11)
The Expression
The expression:

organization <<= organization or normalizedName.identity

Is a: Project.Setting[S]

And <<= is thus:

final def <<= (app: Initialize[S]): Setting[S]

for: InputKey, SettingsKey


                             Bay Area Scala Enthusiasts Meeting #42 (10-10-11)
The Emojis
                The ONE




    <<=
Bay Area Scala Enthusiasts Meeting #42 (10-10-11)
The Emojis
  And the rest

  := += ++= <+= <++= ~=
• Initialize ( := )


• Append ( += ++= <+= <++= )


• Update ( ~= )



                      Bay Area Scala Enthusiasts Meeting #42 (10-10-11)
Scoped Keys
sealed trait Key[T] extends Scoped

final class SettingKey[T] extends Key[T] with ScopedSetting[T]

final class TaskKey[T] extends Key[T] with ScopedTask[T]

final class InputKey[T] extends Key[InputTask[T]] with ScopedInput[T]




                          Bay Area Scala Enthusiasts Meeting #42 (10-10-11)
Examples
name := "lift-demo"

name ~= formalize

resolvers in GlobalScope += JavaNet2Repository

scalacOptions ++= Seq("-encoding", "UTF-8")

resolvers <++= isSnapshot { s => if (s) Seq(ScalaToolsSnapshots) else Nil }

inceptionYear <<= inceptionYear ?? Some(2011)

organization <<= organization or normalizedName.identity
                            Bay Area Scala Enthusiasts Meeting #42 (10-10-11)
Examples
libraryDependencies <<= (libraryDependencies, scalaVersion) apply { (ld, sv) =>
ld :+ scalap(sv) })

libraryDependencies <+= (scalaVersion)(scalap)

libraryDependencies <+= scalaVersion apply scalap

scalacOptions /*in GlobalScope*/ in doc <++= (name in doc, version in doc) map
(Seq("-doc-title", _, "-doc-version", _))




                         Bay Area Scala Enthusiasts Meeting #42 (10-10-11)
Settings are Scoped!
def in(s: Scope): Result // ScopedSetting, ScopedTask, ScopedInput

def in(p: Reference): Result

def in(t: Scoped): Result

def in(c: ConfigKey): Result

def in(c: ConfigKey, t: Scoped): Result

def in(p: Reference, c: ConfigKey): Result

def in(p: Reference, t: Scoped): Result

def in(p: Reference, c: ConfigKey, t: Scoped): Result

def in(p: ScopeAxis[Reference], c: ScopeAxis[ConfigKey], t: ScopeAxis[AttributeKey[_]]): Result

                                      Bay Area Scala Enthusiasts Meeting #42 (10-10-11)
Miscellaneous
MOAR Emojis (in shell)!

~ + ++ ; ! < -

Plugin, State, Life, Universe and everything else




                            Bay Area Scala Enthusiasts Meeting #42 (10-10-11)
Lost?
 Befriend ‘em

• Defaults.scala

• Keys.scala

• IDE




                   Bay Area Scala Enthusiasts Meeting #42 (10-10-11)
Exercise
Questions?

More Related Content

Similar to Simple Build Tool Introduction

Scala @ TechMeetup Edinburgh
Scala @ TechMeetup EdinburghScala @ TechMeetup Edinburgh
Scala @ TechMeetup EdinburghStuart Roebuck
 
JavaOne報告会 Java SE/JavaFX 編 - JJUG CCC 2010 Fall
JavaOne報告会 Java SE/JavaFX 編 - JJUG CCC 2010 FallJavaOne報告会 Java SE/JavaFX 編 - JJUG CCC 2010 Fall
JavaOne報告会 Java SE/JavaFX 編 - JJUG CCC 2010 FallYuichi Sakuraba
 
Interceptors: Into the Core of Pedestal
Interceptors: Into the Core of PedestalInterceptors: Into the Core of Pedestal
Interceptors: Into the Core of PedestalKent Ohashi
 
Starting with Scala : Frontier Developer's Meetup December 2010
Starting with Scala : Frontier Developer's Meetup December 2010Starting with Scala : Frontier Developer's Meetup December 2010
Starting with Scala : Frontier Developer's Meetup December 2010Derek Chen-Becker
 
"ClojureScript journey: from little script, to CLI program, to AWS Lambda fun...
"ClojureScript journey: from little script, to CLI program, to AWS Lambda fun..."ClojureScript journey: from little script, to CLI program, to AWS Lambda fun...
"ClojureScript journey: from little script, to CLI program, to AWS Lambda fun...Julia Cherniak
 
Android development with Scala and SBT
Android development with Scala and SBTAndroid development with Scala and SBT
Android development with Scala and SBTAnton Yalyshev
 
Gradle: The Build system you have been waiting for
Gradle: The Build system you have been waiting forGradle: The Build system you have been waiting for
Gradle: The Build system you have been waiting forCorneil du Plessis
 
Deep Dive Java 17 Devoxx UK
Deep Dive Java 17 Devoxx UKDeep Dive Java 17 Devoxx UK
Deep Dive Java 17 Devoxx UKJosé Paumard
 
Infrastructure-as-code: bridging the gap between Devs and Ops
Infrastructure-as-code: bridging the gap between Devs and OpsInfrastructure-as-code: bridging the gap between Devs and Ops
Infrastructure-as-code: bridging the gap between Devs and OpsMykyta Protsenko
 
Spring Day | Spring and Scala | Eberhard Wolff
Spring Day | Spring and Scala | Eberhard WolffSpring Day | Spring and Scala | Eberhard Wolff
Spring Day | Spring and Scala | Eberhard WolffJAX London
 
Torquebox OSCON Java 2011
Torquebox OSCON Java 2011Torquebox OSCON Java 2011
Torquebox OSCON Java 2011tobiascrawley
 

Similar to Simple Build Tool Introduction (20)

Sap java
Sap javaSap java
Sap java
 
Wider than rails
Wider than railsWider than rails
Wider than rails
 
JavaCro'14 - Scala and Java EE 7 Development Experiences – Peter Pilgrim
JavaCro'14 - Scala and Java EE 7 Development Experiences – Peter PilgrimJavaCro'14 - Scala and Java EE 7 Development Experiences – Peter Pilgrim
JavaCro'14 - Scala and Java EE 7 Development Experiences – Peter Pilgrim
 
Scala @ TechMeetup Edinburgh
Scala @ TechMeetup EdinburghScala @ TechMeetup Edinburgh
Scala @ TechMeetup Edinburgh
 
JavaOne報告会 Java SE/JavaFX 編 - JJUG CCC 2010 Fall
JavaOne報告会 Java SE/JavaFX 編 - JJUG CCC 2010 FallJavaOne報告会 Java SE/JavaFX 編 - JJUG CCC 2010 Fall
JavaOne報告会 Java SE/JavaFX 編 - JJUG CCC 2010 Fall
 
Slick @ Confitura 2013
Slick @ Confitura 2013Slick @ Confitura 2013
Slick @ Confitura 2013
 
Play framework
Play frameworkPlay framework
Play framework
 
SCALA - Functional domain
SCALA -  Functional domainSCALA -  Functional domain
SCALA - Functional domain
 
Play vs Rails
Play vs RailsPlay vs Rails
Play vs Rails
 
Interceptors: Into the Core of Pedestal
Interceptors: Into the Core of PedestalInterceptors: Into the Core of Pedestal
Interceptors: Into the Core of Pedestal
 
Starting with Scala : Frontier Developer's Meetup December 2010
Starting with Scala : Frontier Developer's Meetup December 2010Starting with Scala : Frontier Developer's Meetup December 2010
Starting with Scala : Frontier Developer's Meetup December 2010
 
"ClojureScript journey: from little script, to CLI program, to AWS Lambda fun...
"ClojureScript journey: from little script, to CLI program, to AWS Lambda fun..."ClojureScript journey: from little script, to CLI program, to AWS Lambda fun...
"ClojureScript journey: from little script, to CLI program, to AWS Lambda fun...
 
Android development with Scala and SBT
Android development with Scala and SBTAndroid development with Scala and SBT
Android development with Scala and SBT
 
Gradle: The Build system you have been waiting for
Gradle: The Build system you have been waiting forGradle: The Build system you have been waiting for
Gradle: The Build system you have been waiting for
 
Deep Dive Java 17 Devoxx UK
Deep Dive Java 17 Devoxx UKDeep Dive Java 17 Devoxx UK
Deep Dive Java 17 Devoxx UK
 
Infrastructure-as-code: bridging the gap between Devs and Ops
Infrastructure-as-code: bridging the gap between Devs and OpsInfrastructure-as-code: bridging the gap between Devs and Ops
Infrastructure-as-code: bridging the gap between Devs and Ops
 
Nodejs - A quick tour (v5)
Nodejs - A quick tour (v5)Nodejs - A quick tour (v5)
Nodejs - A quick tour (v5)
 
Full Stack Scala
Full Stack ScalaFull Stack Scala
Full Stack Scala
 
Spring Day | Spring and Scala | Eberhard Wolff
Spring Day | Spring and Scala | Eberhard WolffSpring Day | Spring and Scala | Eberhard Wolff
Spring Day | Spring and Scala | Eberhard Wolff
 
Torquebox OSCON Java 2011
Torquebox OSCON Java 2011Torquebox OSCON Java 2011
Torquebox OSCON Java 2011
 

Recently uploaded

How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUK Journal
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?Igalia
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024Results
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 

Recently uploaded (20)

How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 

Simple Build Tool Introduction

  • 1. SBT <<= (Build) { FTW } @indrajitr
  • 2. SBT • Build tool on Scala for building Scala-Java projects • Compliant with Maven's convention (mostly) • Basics done right • Easy to set up for simple projects (intrusive) • Shares a *lot* with Scala Bay Area Scala Enthusiasts Meeting #42 (10-10-11)
  • 3. Build Definitions • Simple: Quick DSL • Diabolical: Scala code (with embedded DSL) • And the shell rocks Bay Area Scala Enthusiasts Meeting #42 (10-10-11)
  • 5. build.sbt organization := "net.liftweb" name := "lift-demo" version := "1.0" scalaVersion := "2.9.1" libraryDependencies ++= Seq("net.liftweb" %% "lift-webkit" % "2.4-M4", "org.eclipse.jetty" % "jetty-webapp" % "7.3.0.v20110203" % "jetty") Bay Area Scala Enthusiasts Meeting #42 (10-10-11)
  • 6. project/build.scala import sbt._ object LiftBuild extends Build { lazy val projects: Seq[ProjectReference] = Seq(common, actor, json) lazy val framework = Project("lift-framework", file(".")).aggregate(projects) lazy val common = Project(“lift-common”, file(“core/common”)).settings(/*...*/) lazy val actor = Project(“lift-actor”, file(“core/actor”)).dependsOn(common).settings(/*...*/) lazy val json = Project("lift-json", file("core/json")) dependsOn(common % "test") //lazy val foo = Project("lift-foo", file("core/foo"), delegates = common :: Nil) } Bay Area Scala Enthusiasts Meeting #42 (10-10-11)
  • 7. The Expression Reminder: Statement ≠ Expression Statement: val foo = bar + baz Expression: bar + baz Bay Area Scala Enthusiasts Meeting #42 (10-10-11)
  • 8. The Expression The expression: organization <<= organization or normalizedName.identity Is a: Project.Setting[S] And <<= is thus: final def <<= (app: Initialize[S]): Setting[S] for: InputKey, SettingsKey Bay Area Scala Enthusiasts Meeting #42 (10-10-11)
  • 9. The Emojis The ONE <<= Bay Area Scala Enthusiasts Meeting #42 (10-10-11)
  • 10. The Emojis And the rest := += ++= <+= <++= ~= • Initialize ( := ) • Append ( += ++= <+= <++= ) • Update ( ~= ) Bay Area Scala Enthusiasts Meeting #42 (10-10-11)
  • 11. Scoped Keys sealed trait Key[T] extends Scoped final class SettingKey[T] extends Key[T] with ScopedSetting[T] final class TaskKey[T] extends Key[T] with ScopedTask[T] final class InputKey[T] extends Key[InputTask[T]] with ScopedInput[T] Bay Area Scala Enthusiasts Meeting #42 (10-10-11)
  • 12. Examples name := "lift-demo" name ~= formalize resolvers in GlobalScope += JavaNet2Repository scalacOptions ++= Seq("-encoding", "UTF-8") resolvers <++= isSnapshot { s => if (s) Seq(ScalaToolsSnapshots) else Nil } inceptionYear <<= inceptionYear ?? Some(2011) organization <<= organization or normalizedName.identity Bay Area Scala Enthusiasts Meeting #42 (10-10-11)
  • 13. Examples libraryDependencies <<= (libraryDependencies, scalaVersion) apply { (ld, sv) => ld :+ scalap(sv) }) libraryDependencies <+= (scalaVersion)(scalap) libraryDependencies <+= scalaVersion apply scalap scalacOptions /*in GlobalScope*/ in doc <++= (name in doc, version in doc) map (Seq("-doc-title", _, "-doc-version", _)) Bay Area Scala Enthusiasts Meeting #42 (10-10-11)
  • 14. Settings are Scoped! def in(s: Scope): Result // ScopedSetting, ScopedTask, ScopedInput def in(p: Reference): Result def in(t: Scoped): Result def in(c: ConfigKey): Result def in(c: ConfigKey, t: Scoped): Result def in(p: Reference, c: ConfigKey): Result def in(p: Reference, t: Scoped): Result def in(p: Reference, c: ConfigKey, t: Scoped): Result def in(p: ScopeAxis[Reference], c: ScopeAxis[ConfigKey], t: ScopeAxis[AttributeKey[_]]): Result Bay Area Scala Enthusiasts Meeting #42 (10-10-11)
  • 15. Miscellaneous MOAR Emojis (in shell)! ~ + ++ ; ! < - Plugin, State, Life, Universe and everything else Bay Area Scala Enthusiasts Meeting #42 (10-10-11)
  • 16. Lost? Befriend ‘em • Defaults.scala • Keys.scala • IDE Bay Area Scala Enthusiasts Meeting #42 (10-10-11)

Editor's Notes

  1. The title is actually valid SBT expression\nSkipping lots of things to make room for more important ones in 45 min\nBasic things and then SBT code\nNo FP details (unless something slips out)\n\n
  2. It&amp;#x2019;s SIMPLE once you get past the initial hoop\nAs crazy and as awesome as scala\nTricky to get going, no looking back when there\n
  3. Roughly equivalent to pom.xml\n\nGreat DSL in SBT: Buy DSL in Action or learn SBT for free\n\n
  4. \n
  5. \n
  6. Contents of settings are expressions\n
  7. Expressions compose, statements don&amp;#x2019;t\nExpression has a value\n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. lazy val scalap: String =&gt; ModuleID = &quot;org.scala-lang&quot; % &quot;scalap&quot; % _\n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n