the road to sbt 1 - lightbenddownloads.typesafe.com/website/presentations/...leader of tools team @...
TRANSCRIPT
![Page 1: The road to sbt 1 - Lightbenddownloads.typesafe.com/website/presentations/...Leader of tools team @ Typesafe Author Scala in Depth sbt in Action. Agenda A brief (incomplete and mostly](https://reader034.vdocuments.site/reader034/viewer/2022051923/60118ea49310e06ee6746fc4/html5/thumbnails/1.jpg)
The road to sbt 1.0Paved with Server
![Page 2: The road to sbt 1 - Lightbenddownloads.typesafe.com/website/presentations/...Leader of tools team @ Typesafe Author Scala in Depth sbt in Action. Agenda A brief (incomplete and mostly](https://reader034.vdocuments.site/reader034/viewer/2022051923/60118ea49310e06ee6746fc4/html5/thumbnails/2.jpg)
Who are we?@eed3si9n (Eugene Yokota)● sbt core dev● scalaxb● treehugger.scala● "learning Scalaz"● sbt-assembly etc
Josh Suereth● Big Nerd● Leader of tools
team @ Typesafe● Author
○ Scala in Depth○ sbt in Action
![Page 3: The road to sbt 1 - Lightbenddownloads.typesafe.com/website/presentations/...Leader of tools team @ Typesafe Author Scala in Depth sbt in Action. Agenda A brief (incomplete and mostly](https://reader034.vdocuments.site/reader034/viewer/2022051923/60118ea49310e06ee6746fc4/html5/thumbnails/3.jpg)
Agenda● A brief (incomplete and mostly wrong) history of Build Tools● A roadmap to sbt 1.0
○ Modularization● sbt-server
![Page 4: The road to sbt 1 - Lightbenddownloads.typesafe.com/website/presentations/...Leader of tools team @ Typesafe Author Scala in Depth sbt in Action. Agenda A brief (incomplete and mostly](https://reader034.vdocuments.site/reader034/viewer/2022051923/60118ea49310e06ee6746fc4/html5/thumbnails/4.jpg)
A brief history of build toolsIncomplete and mostly wrong
![Page 5: The road to sbt 1 - Lightbenddownloads.typesafe.com/website/presentations/...Leader of tools team @ Typesafe Author Scala in Depth sbt in Action. Agenda A brief (incomplete and mostly](https://reader034.vdocuments.site/reader034/viewer/2022051923/60118ea49310e06ee6746fc4/html5/thumbnails/5.jpg)
#!/bin/sh
![Page 6: The road to sbt 1 - Lightbenddownloads.typesafe.com/website/presentations/...Leader of tools team @ Typesafe Author Scala in Depth sbt in Action. Agenda A brief (incomplete and mostly](https://reader034.vdocuments.site/reader034/viewer/2022051923/60118ea49310e06ee6746fc4/html5/thumbnails/6.jpg)
$ make -j 2 hello# MakefileOBJ = test.o test2.o
%.o : %.c$(CC) -c -o $@ < $<
hello : $(OBJ)
gcc -o $@ $^
![Page 7: The road to sbt 1 - Lightbenddownloads.typesafe.com/website/presentations/...Leader of tools team @ Typesafe Author Scala in Depth sbt in Action. Agenda A brief (incomplete and mostly](https://reader034.vdocuments.site/reader034/viewer/2022051923/60118ea49310e06ee6746fc4/html5/thumbnails/7.jpg)
Make (1976)
● new! Dependency-based programming● Uses system command to carry out tasks● problem! Machine-dependent
Q: How do I build this program?
![Page 8: The road to sbt 1 - Lightbenddownloads.typesafe.com/website/presentations/...Leader of tools team @ Typesafe Author Scala in Depth sbt in Action. Agenda A brief (incomplete and mostly](https://reader034.vdocuments.site/reader034/viewer/2022051923/60118ea49310e06ee6746fc4/html5/thumbnails/8.jpg)
Autoconf/Automake (1991/1996)
● Generate configure script and Makefile templates○ Configure generates header scripts and real makefile○ Configure discovers what the machine has
● Use an even MORE arcane syntax○ m4 macros○ magic strings
Q: How do I build on this machine?
![Page 9: The road to sbt 1 - Lightbenddownloads.typesafe.com/website/presentations/...Leader of tools team @ Typesafe Author Scala in Depth sbt in Action. Agenda A brief (incomplete and mostly](https://reader034.vdocuments.site/reader034/viewer/2022051923/60118ea49310e06ee6746fc4/html5/thumbnails/9.jpg)
Internet
![Page 10: The road to sbt 1 - Lightbenddownloads.typesafe.com/website/presentations/...Leader of tools team @ Typesafe Author Scala in Depth sbt in Action. Agenda A brief (incomplete and mostly](https://reader034.vdocuments.site/reader034/viewer/2022051923/60118ea49310e06ee6746fc4/html5/thumbnails/10.jpg)
$ ant dist<project name="MyProject" default="dist" basedir=".">
<description>example build file</description>
<property name="src" location="src"/>
<property name="build" location="build"/>
<property name="dist" location="dist"/>
<target name="compile" description="compile the source " >
<javac srcdir="${src}" destdir="${build}"/>
</target>
<target name="dist" depends="compile"
description="generate the distribution" >
<mkdir dir="${dist}/lib"/>
<jar jarfile="${dist}/lib/MyProject-${DSTAMP}.jar"
basedir="${build}"/>
</target>
</project>
![Page 11: The road to sbt 1 - Lightbenddownloads.typesafe.com/website/presentations/...Leader of tools team @ Typesafe Author Scala in Depth sbt in Action. Agenda A brief (incomplete and mostly](https://reader034.vdocuments.site/reader034/viewer/2022051923/60118ea49310e06ee6746fc4/html5/thumbnails/11.jpg)
Ant (2000)
Q: How do I build on this machine?
● new! Built-in tasks like mkdir, javac, and jar○ Self-contained and platform-independent
● task plugins (like ant-contrib)● problem! Hard to reuse build logic
![Page 12: The road to sbt 1 - Lightbenddownloads.typesafe.com/website/presentations/...Leader of tools team @ Typesafe Author Scala in Depth sbt in Action. Agenda A brief (incomplete and mostly](https://reader034.vdocuments.site/reader034/viewer/2022051923/60118ea49310e06ee6746fc4/html5/thumbnails/12.jpg)
Package managers
Q: How do I find library source/binary?
● new! Metadata to track library dependencies● new! Repository to host source and binary● CTAN (1993), Port (1994), RPM (1997), APT (1998)
![Page 13: The road to sbt 1 - Lightbenddownloads.typesafe.com/website/presentations/...Leader of tools team @ Typesafe Author Scala in Depth sbt in Action. Agenda A brief (incomplete and mostly](https://reader034.vdocuments.site/reader034/viewer/2022051923/60118ea49310e06ee6746fc4/html5/thumbnails/13.jpg)
Maven (2004)
Q: How do I find library source/binary?Q: How do I enforce consistent builds?
● Metadata to track library dependencies● Repository to host source and binary● new! Default build (Convention over Configuration)● new! Plugins that allowed reuse of build logic● problem! Difficult to customize
![Page 14: The road to sbt 1 - Lightbenddownloads.typesafe.com/website/presentations/...Leader of tools team @ Typesafe Author Scala in Depth sbt in Action. Agenda A brief (incomplete and mostly](https://reader034.vdocuments.site/reader034/viewer/2022051923/60118ea49310e06ee6746fc4/html5/thumbnails/14.jpg)
Ivy (2004)
Q: How do I find library source/binary?
● Metadata to track library dependencies● Repository to host source and binary● Maven integration on top of Ant
![Page 15: The road to sbt 1 - Lightbenddownloads.typesafe.com/website/presentations/...Leader of tools team @ Typesafe Author Scala in Depth sbt in Action. Agenda A brief (incomplete and mostly](https://reader034.vdocuments.site/reader034/viewer/2022051923/60118ea49310e06ee6746fc4/html5/thumbnails/15.jpg)
Rake (2003)rule '.o' => ['.c'] do |t|
sh "cc #{t.source} -c -o #{t.name}"
end
task :name, [:first_name, :last_name] do |t, args|
puts "First name is #{args.first_name}"
puts "Last name is #{args.last_name}"
end
![Page 16: The road to sbt 1 - Lightbenddownloads.typesafe.com/website/presentations/...Leader of tools team @ Typesafe Author Scala in Depth sbt in Action. Agenda A brief (incomplete and mostly](https://reader034.vdocuments.site/reader034/viewer/2022051923/60118ea49310e06ee6746fc4/html5/thumbnails/16.jpg)
Rake (2004)
Q: How do I build on this machine?Q: How do I customize my build?
● new! Internal DSL○ Leverage Ruby libraries rather than shell programs○ Provide cross-platform ruby libraries for supported
language tools● Real programming language to write tasks
![Page 17: The road to sbt 1 - Lightbenddownloads.typesafe.com/website/presentations/...Leader of tools team @ Typesafe Author Scala in Depth sbt in Action. Agenda A brief (incomplete and mostly](https://reader034.vdocuments.site/reader034/viewer/2022051923/60118ea49310e06ee6746fc4/html5/thumbnails/17.jpg)
O NOES XML!
SAX parsing is declared uncool (immediately after inception)
REST/JSON attempt to displace SOAP
![Page 18: The road to sbt 1 - Lightbenddownloads.typesafe.com/website/presentations/...Leader of tools team @ Typesafe Author Scala in Depth sbt in Action. Agenda A brief (incomplete and mostly](https://reader034.vdocuments.site/reader034/viewer/2022051923/60118ea49310e06ee6746fc4/html5/thumbnails/18.jpg)
Buildr (2008)/Gradle (2009)/ Leningen(2009)
● Maven integration
Q: How do I find library source/binary?
Q: How do I customize my build?● Use an internal DSL and a real program language
![Page 19: The road to sbt 1 - Lightbenddownloads.typesafe.com/website/presentations/...Leader of tools team @ Typesafe Author Scala in Depth sbt in Action. Agenda A brief (incomplete and mostly](https://reader034.vdocuments.site/reader034/viewer/2022051923/60118ea49310e06ee6746fc4/html5/thumbnails/19.jpg)
sbt (2008)
Q: How do I find library source/binary?Q: How do I customize my build?Q: How can I develop faster?● new! Incremental compiler tracking source deps● new! Interactive shell + library-aware REPL● new! Test framework abstraction● new! Parallel by default● shabby-chic! ANSI colors● Internal DSL + Maven integration
![Page 20: The road to sbt 1 - Lightbenddownloads.typesafe.com/website/presentations/...Leader of tools team @ Typesafe Author Scala in Depth sbt in Action. Agenda A brief (incomplete and mostly](https://reader034.vdocuments.site/reader034/viewer/2022051923/60118ea49310e06ee6746fc4/html5/thumbnails/20.jpg)
Google Blaze (2009)
Q: How can I develop faster?Q: How do I avoid version conflicts?● new! Incremental build● new! Cache builds remotely● new! Clustered Building● Abandon Maven. Check in all source to version control.
Force everyone on the same version.● 1 SCM repo for all projects● Assume homogeneous-ish environment
![Page 21: The road to sbt 1 - Lightbenddownloads.typesafe.com/website/presentations/...Leader of tools team @ Typesafe Author Scala in Depth sbt in Action. Agenda A brief (incomplete and mostly](https://reader034.vdocuments.site/reader034/viewer/2022051923/60118ea49310e06ee6746fc4/html5/thumbnails/21.jpg)
Pants (2014)/Buck (2014)
Q: How can I develop faster?Q: How do I avoid version conflicts?
● Incremental build● Cache builds remotely● Force all dependencies to the same version for all
projects● Put everything in a mono-repository
![Page 22: The road to sbt 1 - Lightbenddownloads.typesafe.com/website/presentations/...Leader of tools team @ Typesafe Author Scala in Depth sbt in Action. Agenda A brief (incomplete and mostly](https://reader034.vdocuments.site/reader034/viewer/2022051923/60118ea49310e06ee6746fc4/html5/thumbnails/22.jpg)
History
make (1977)
automake (1996)/autoconf (1991)
Rake (2003)
Maven (2004)
Ivy (2004)
sbt (2008)
Blaze (2009)
Gradle (2009)
Leiningen (2009)
Pants (2014)
Buck (2014)
RPM (1997)
Ant (2000)
Buildr (2008)
Jon Pretty's shell scripts (2004-2015)
![Page 23: The road to sbt 1 - Lightbenddownloads.typesafe.com/website/presentations/...Leader of tools team @ Typesafe Author Scala in Depth sbt in Action. Agenda A brief (incomplete and mostly](https://reader034.vdocuments.site/reader034/viewer/2022051923/60118ea49310e06ee6746fc4/html5/thumbnails/23.jpg)
History Recap● sbt has inherited:
○ dependency based programming (Make)○ internal build DSL (Rake)○ Package/Library Management (Maven)○ Convention over configuration (Maven)○ Re-usable build flow (Maven)
● sbt brings:○ interactivity (on the shell)○ parallel by default
![Page 24: The road to sbt 1 - Lightbenddownloads.typesafe.com/website/presentations/...Leader of tools team @ Typesafe Author Scala in Depth sbt in Action. Agenda A brief (incomplete and mostly](https://reader034.vdocuments.site/reader034/viewer/2022051923/60118ea49310e06ee6746fc4/html5/thumbnails/24.jpg)
A roadmap to sbt 1.0stability + sbt server => modularization
![Page 25: The road to sbt 1 - Lightbenddownloads.typesafe.com/website/presentations/...Leader of tools team @ Typesafe Author Scala in Depth sbt in Action. Agenda A brief (incomplete and mostly](https://reader034.vdocuments.site/reader034/viewer/2022051923/60118ea49310e06ee6746fc4/html5/thumbnails/25.jpg)
Stability1. Conceptual stability2. Binary compatibility of sbt plugins3. Source compatibility of build files
![Page 26: The road to sbt 1 - Lightbenddownloads.typesafe.com/website/presentations/...Leader of tools team @ Typesafe Author Scala in Depth sbt in Action. Agenda A brief (incomplete and mostly](https://reader034.vdocuments.site/reader034/viewer/2022051923/60118ea49310e06ee6746fc4/html5/thumbnails/26.jpg)
Concepts (mostly stable)1. Scala incremental compiler2. Dependency manager (Scala-aware)3. Task and plugin system (using Scala)4. Test framework abstraction5. Text-based interactive shell
5. sbt server + client(s)
![Page 27: The road to sbt 1 - Lightbenddownloads.typesafe.com/website/presentations/...Leader of tools team @ Typesafe Author Scala in Depth sbt in Action. Agenda A brief (incomplete and mostly](https://reader034.vdocuments.site/reader034/viewer/2022051923/60118ea49310e06ee6746fc4/html5/thumbnails/27.jpg)
Plugin binary compatibility● sbt 0.13 maintained 18 months of bincompat
○ Lots of hacks and effort. Unable to remove cruft.● sbt 1.x.y should be bincompat with 1.0.0● Need to minimize surface API
○ able to add small features when requested
![Page 28: The road to sbt 1 - Lightbenddownloads.typesafe.com/website/presentations/...Leader of tools team @ Typesafe Author Scala in Depth sbt in Action. Agenda A brief (incomplete and mostly](https://reader034.vdocuments.site/reader034/viewer/2022051923/60118ea49310e06ee6746fc4/html5/thumbnails/28.jpg)
Build source compatibility● Source compatibility of your build.sbt● sbt 1.x.y should be stable● sbt 1.0 gives us opportunity to break DSL
○ Deprecate project/build.scala?○ Unify sbt shell key syntax w/ Scala DSL syntax
![Page 29: The road to sbt 1 - Lightbenddownloads.typesafe.com/website/presentations/...Leader of tools team @ Typesafe Author Scala in Depth sbt in Action. Agenda A brief (incomplete and mostly](https://reader034.vdocuments.site/reader034/viewer/2022051923/60118ea49310e06ee6746fc4/html5/thumbnails/29.jpg)
ModularizationComponentize stable features, innovate new ideas
1. Pull out cohesive subprojects2. Distinguish public API and internal details3. Document usages4. Clean up historical code5. Cross publish for latest scala versions
(if applicable)6. Publish to Maven Central (or JCenter)
![Page 30: The road to sbt 1 - Lightbenddownloads.typesafe.com/website/presentations/...Leader of tools team @ Typesafe Author Scala in Depth sbt in Action. Agenda A brief (incomplete and mostly](https://reader034.vdocuments.site/reader034/viewer/2022051923/60118ea49310e06ee6746fc4/html5/thumbnails/30.jpg)
Module candidates● Launcher API● Serialization API● Compiler/REPL API● Test framework API● Dependency Management API● Network API● IO API● Task DSL● Completion API● sbt client (sbt-server)
![Page 31: The road to sbt 1 - Lightbenddownloads.typesafe.com/website/presentations/...Leader of tools team @ Typesafe Author Scala in Depth sbt in Action. Agenda A brief (incomplete and mostly](https://reader034.vdocuments.site/reader034/viewer/2022051923/60118ea49310e06ee6746fc4/html5/thumbnails/31.jpg)
sbt-serverArchitecture and Design
![Page 32: The road to sbt 1 - Lightbenddownloads.typesafe.com/website/presentations/...Leader of tools team @ Typesafe Author Scala in Depth sbt in Action. Agenda A brief (incomplete and mostly](https://reader034.vdocuments.site/reader034/viewer/2022051923/60118ea49310e06ee6746fc4/html5/thumbnails/32.jpg)
The problem● Many things want access to the build● We need to centrally control build-related
tasks to avoid breakage.○ intellij auto-import + "sbt ~ test"○ activator + "play run"
![Page 33: The road to sbt 1 - Lightbenddownloads.typesafe.com/website/presentations/...Leader of tools team @ Typesafe Author Scala in Depth sbt in Action. Agenda A brief (incomplete and mostly](https://reader034.vdocuments.site/reader034/viewer/2022051923/60118ea49310e06ee6746fc4/html5/thumbnails/33.jpg)
sbt-server design
sbt-server
disk (target/)
sbt client
commands /watches
changesEvents(logs, status, custom)
![Page 34: The road to sbt 1 - Lightbenddownloads.typesafe.com/website/presentations/...Leader of tools team @ Typesafe Author Scala in Depth sbt in Action. Agenda A brief (incomplete and mostly](https://reader034.vdocuments.site/reader034/viewer/2022051923/60118ea49310e06ee6746fc4/html5/thumbnails/34.jpg)
Before server - Command Engine
CMD(compile)
Engine(sequential)
Task Engine(parallel)
Read next command from stdin
Next command
Read previous log file Reload the build
Terminal Client
![Page 35: The road to sbt 1 - Lightbenddownloads.typesafe.com/website/presentations/...Leader of tools team @ Typesafe Author Scala in Depth sbt in Action. Agenda A brief (incomplete and mostly](https://reader034.vdocuments.site/reader034/viewer/2022051923/60118ea49310e06ee6746fc4/html5/thumbnails/35.jpg)
After server - Execution Queue
CMD(compile)
Engine
TasksRead server Queue
Next command
previous log file
Reload the build
Server Event Loop
Request Queue
Com
mand Q
ueue
Client #1 Client #2
Latest State
Next State
![Page 36: The road to sbt 1 - Lightbenddownloads.typesafe.com/website/presentations/...Leader of tools team @ Typesafe Author Scala in Depth sbt in Action. Agenda A brief (incomplete and mostly](https://reader034.vdocuments.site/reader034/viewer/2022051923/60118ea49310e06ee6746fc4/html5/thumbnails/36.jpg)
Problem: Server discovery
Who starts the sbt-server, how do we know it is
running, how do we connect?
![Page 37: The road to sbt 1 - Lightbenddownloads.typesafe.com/website/presentations/...Leader of tools team @ Typesafe Author Scala in Depth sbt in Action. Agenda A brief (incomplete and mostly](https://reader034.vdocuments.site/reader034/viewer/2022051923/60118ea49310e06ee6746fc4/html5/thumbnails/37.jpg)
sbt-launcher● sbt 0.13.2 launcher had support for "servers"
○ launch config specifies "lock" file which prevents more than one service being started
○ "lock" file contains location (ip / port) of the service○ server is tested (ping) for liveness by the launcher.
![Page 38: The road to sbt 1 - Lightbenddownloads.typesafe.com/website/presentations/...Leader of tools team @ Typesafe Author Scala in Depth sbt in Action. Agenda A brief (incomplete and mostly](https://reader034.vdocuments.site/reader034/viewer/2022051923/60118ea49310e06ee6746fc4/html5/thumbnails/38.jpg)
Problem: Disconnects● Client may not be the one to start sbt● Client may disconnect from server, or server
may crash
![Page 39: The road to sbt 1 - Lightbenddownloads.typesafe.com/website/presentations/...Leader of tools team @ Typesafe Author Scala in Depth sbt in Action. Agenda A brief (incomplete and mostly](https://reader034.vdocuments.site/reader034/viewer/2022051923/60118ea49310e06ee6746fc4/html5/thumbnails/39.jpg)
Connect as an Eventval connector = SbtConnector( "terminal", "Command Line Terminal", configuration.baseDirectory)def onConnect(client: SbtClient): Unit = { client handleEvents { … } client watch ...}connector.open(onConnect, onError)(<execution context>)
![Page 40: The road to sbt 1 - Lightbenddownloads.typesafe.com/website/presentations/...Leader of tools team @ Typesafe Author Scala in Depth sbt in Action. Agenda A brief (incomplete and mostly](https://reader034.vdocuments.site/reader034/viewer/2022051923/60118ea49310e06ee6746fc4/html5/thumbnails/40.jpg)
Connect as an Eventval connector = SbtConnector( "terminal", "Command Line Terminal", configuration.baseDirectory)def onConnect(client: SbtClient): Unit = { client handleEvents { … } client watch ...}connector.open(onConnect, onError)(<execution context>)
Clients reconstruct their watchesand restore their view of the buildon any reconnect
![Page 41: The road to sbt 1 - Lightbenddownloads.typesafe.com/website/presentations/...Leader of tools team @ Typesafe Author Scala in Depth sbt in Action. Agenda A brief (incomplete and mostly](https://reader034.vdocuments.site/reader034/viewer/2022051923/60118ea49310e06ee6746fc4/html5/thumbnails/41.jpg)
Problem: protocolWe needed a good mechanism for client + server to communicate.● Something that can evolve and maintain
compatibility● Something that is easy for plugin authors to
extend.
![Page 42: The road to sbt 1 - Lightbenddownloads.typesafe.com/website/presentations/...Leader of tools team @ Typesafe Author Scala in Depth sbt in Action. Agenda A brief (incomplete and mostly](https://reader034.vdocuments.site/reader034/viewer/2022051923/60118ea49310e06ee6746fc4/html5/thumbnails/42.jpg)
sbt-serialization● New library based on Scala Pickling
○ JSON - currently supported format.● sbt-remote-control has versioned protocol
and tests.● (coming) plugin *Keys as protocol
○ remote clients can watch/get values○ require pickler/unpickler when creating *Key○ ??? release plugin "client" jar separate from impl
![Page 43: The road to sbt 1 - Lightbenddownloads.typesafe.com/website/presentations/...Leader of tools team @ Typesafe Author Scala in Depth sbt in Action. Agenda A brief (incomplete and mostly](https://reader034.vdocuments.site/reader034/viewer/2022051923/60118ea49310e06ee6746fc4/html5/thumbnails/43.jpg)
Problem: Inputsbt tasks may want the user to type input
![Page 44: The road to sbt 1 - Lightbenddownloads.typesafe.com/website/presentations/...Leader of tools team @ Typesafe Author Scala in Depth sbt in Action. Agenda A brief (incomplete and mostly](https://reader034.vdocuments.site/reader034/viewer/2022051923/60118ea49310e06ee6746fc4/html5/thumbnails/44.jpg)
Example Client (input)client.requestExecution( "run", Some(TerminalInteraction -> TerminalThread))
client server
ExecutionRequest
![Page 45: The road to sbt 1 - Lightbenddownloads.typesafe.com/website/presentations/...Leader of tools team @ Typesafe Author Scala in Depth sbt in Action. Agenda A brief (incomplete and mostly](https://reader034.vdocuments.site/reader034/viewer/2022051923/60118ea49310e06ee6746fc4/html5/thumbnails/45.jpg)
Example task (input)readInput := { val context = (interactionService in Global).value context.readLine("> ", mask=false)}
![Page 46: The road to sbt 1 - Lightbenddownloads.typesafe.com/website/presentations/...Leader of tools team @ Typesafe Author Scala in Depth sbt in Action. Agenda A brief (incomplete and mostly](https://reader034.vdocuments.site/reader034/viewer/2022051923/60118ea49310e06ee6746fc4/html5/thumbnails/46.jpg)
Problem: commands blockWhen running the `run` task, all other build commands are blocked.
![Page 47: The road to sbt 1 - Lightbenddownloads.typesafe.com/website/presentations/...Leader of tools team @ Typesafe Author Scala in Depth sbt in Action. Agenda A brief (incomplete and mostly](https://reader034.vdocuments.site/reader034/viewer/2022051923/60118ea49310e06ee6746fc4/html5/thumbnails/47.jpg)
Background Jobs● tasks can "fork" background jobs in server● clients can discover/connect/stop with
background jobs.
server
background job service
Forked "run" of application
scala REPL
ensime server?
not implemented
![Page 48: The road to sbt 1 - Lightbenddownloads.typesafe.com/website/presentations/...Leader of tools team @ Typesafe Author Scala in Depth sbt in Action. Agenda A brief (incomplete and mostly](https://reader034.vdocuments.site/reader034/viewer/2022051923/60118ea49310e06ee6746fc4/html5/thumbnails/48.jpg)
Input/Interaction Design● Commands
○ The requesting client provides the means for terminal interaction
○ Logs and stderr/stdout are sent to all clients.● Background Jobs (Not Completed Yet)
○ Any client can take terminal interaction for a background task
○ opt-in for getting stdout/stderr events
![Page 49: The road to sbt 1 - Lightbenddownloads.typesafe.com/website/presentations/...Leader of tools team @ Typesafe Author Scala in Depth sbt in Action. Agenda A brief (incomplete and mostly](https://reader034.vdocuments.site/reader034/viewer/2022051923/60118ea49310e06ee6746fc4/html5/thumbnails/49.jpg)
Problem: Existing pluginsCurrent plugins + sbt should be able to try out sbt server, without breaking anything
![Page 50: The road to sbt 1 - Lightbenddownloads.typesafe.com/website/presentations/...Leader of tools team @ Typesafe Author Scala in Depth sbt in Action. Agenda A brief (incomplete and mostly](https://reader034.vdocuments.site/reader034/viewer/2022051923/60118ea49310e06ee6746fc4/html5/thumbnails/50.jpg)
sbt-core-nextA new, optional, plugin for sbt 0.13.x series which provides the new services for sbt-server● BackgroundRunService● InteractionServicePlugin● SendEventServicePlugin● SerializersService
In use in Play 2.4
![Page 51: The road to sbt 1 - Lightbenddownloads.typesafe.com/website/presentations/...Leader of tools team @ Typesafe Author Scala in Depth sbt in Action. Agenda A brief (incomplete and mostly](https://reader034.vdocuments.site/reader034/viewer/2022051923/60118ea49310e06ee6746fc4/html5/thumbnails/51.jpg)
What's next?
![Page 52: The road to sbt 1 - Lightbenddownloads.typesafe.com/website/presentations/...Leader of tools team @ Typesafe Author Scala in Depth sbt in Action. Agenda A brief (incomplete and mostly](https://reader034.vdocuments.site/reader034/viewer/2022051923/60118ea49310e06ee6746fc4/html5/thumbnails/52.jpg)
sbt-server TODOS● Interaction Improvements
○ readline abstraction (a.k.a. Scala REPL support)○ Background Job hooks
● meta-project as first class citizen○ replace `reload plugins` command for first-class
support○ ~ as first-class citizen in server
● kill-on-bad-state watchdog● sbt-terminal-client (drop existing client)
![Page 53: The road to sbt 1 - Lightbenddownloads.typesafe.com/website/presentations/...Leader of tools team @ Typesafe Author Scala in Depth sbt in Action. Agenda A brief (incomplete and mostly](https://reader034.vdocuments.site/reader034/viewer/2022051923/60118ea49310e06ee6746fc4/html5/thumbnails/53.jpg)
How can I help?http://www.scala-sbt.org/community.html#how-can-I-help● Follow @scala_sbt● Contribute to StackOverflow sbt tag● Report bugs● Create plugins
○ Try/migrate your plugins to remote APIs: https://github.com/sbt/sbt-core-next
● Patch the core○ Github Community labeled issues○ Subscribe to sbt-dev list○ Join the discussion on Gitter sbt/sbt