SlideShare a Scribd company logo
1 of 23
   Simple Build Tool



        Anuj Pratap Singh
     Software Consultant
     Knoldus Software LLP
AGENDA


 What is Simple Build Tool (SBT)

 Installation Of SBT

 Features of SBT

 Creating a simple project with SBT

 Multi project build with SBT
What is SBT
 Simple Build Tool (sbt) is an open source build tool , It is a
best choice for Scala projects that aims to do the basics well. It
requires Java 1.6 or later.

➢ SBT uses a small number of concepts to support flexible and
powerful build definitions.

➢ An sbt build definition can contain files ending in .sbt.
Installation of SBT
➢
    Sbt comes pre-built with several available packages for different
    operating systems.
➢
    Mac : Use below command to install Sbt.
    $ port install sbt
➢
     Linux : Download sbt-launch.jar and place it in ~/bin and create a
    script for run above jar.
    java -Xms512M -Xmx1536M -Xss1M -XX:+CMSClassUnloadingEnabled
    -XX:MaxPermSize=384M -jar `dirname $0`/sbt-launch.jar "$@“

    Windows : Create a batch file sbt.bat which contains following script
    $ set SCRIPT_DIR=%~dp0 $ java -Xmx512M -jar "%SCRIPT_DIR
    %sbt-launch.jar" %*
Features Of SBT
 Native support for compiling Scala code and integrating with many
Scala test frameworks .

 Build descriptions written in Scala using a DSL (Domain Specific
Language).

 Support for mixed Java/Scala projects .

 Multi project build support

 Does dependency management

 Interactive shell
Creating SBT Project
Projects will need some manual setup. Basic build settings go in a file
called build.sbt, located in the project's base directory.

For example, my project is in the directory sbtDemo, in
sbtDemo/build.sbt I have to write:

D:>mkdir sbtDemo

D:>cd sbtDemo

D:sbtDemo>sbt
[info] Set current project to default-d0025a (in build
file:/D:/sbtDemo/)
>
Build Defnition
Basic build setting giving as below on sbt console :

D:sbtDemo>sbt
[info] Set current project to default-d0025a (in build file:/D:/sbtDemo/)
> set name :="hello"
[info] Reapplying settings...
[info] Set current project to hello (in build file:/D:/sbtDemo/)
> set version :="1.0"
[info] Reapplying settings...
[info] Set current project to hello (in build file:/D:/sbtDemo/)
> set scalaVersion :="2.9.2"
[info] Reapplying settings...
[info] Set current project to hello (in build file:/D:/sbtDemo/)
> session save
[info] Reapplying settings...
[info] Set current project to hello (in build file:/D:/sbtDemo/)
> exit

D:sbtDemo>
….....continue
In previous setting, On the left, name, version, and scalaVersion are
keys. A key is an instance of SettingKey[T], TaskKey[T], or InputKey[T]
where T is the expected value type.
Note : we should also be add resolver in build.sbt file .
resolvers += "Typesafe Repo" at "http://repo.typesafe.com/typesafe/releases/"


                 Settings are separated by blank lines
If we open build.sbt file then we noticed the blank line between every
item. This isn't just for show; they're actually required in order to
separate each item.
sbt needs some kind of delimiter to tell where one expression stops
and the next begins.
Settings are key initialization pair ,
 for ex. name := “sbtDemo”

          Key                 Initialization
Types Of Keys
The built-in keys are just fields in an object called Keys.
A build.sbt implicitly has an import sbt.Keys._, so sbt.Keys.name can be
referred to as name.

There are three flavors of key:

 Setting Key[T]: a key with a value computed once (the value is computed
one time when loading the project, and kept around).

 Task Key[T]: a key with a value that has to be recomputed each time,
potentially creating side effects and its said to define a task.

 Input Key[T]: a task key which has command line arguments as input.
Adding library dependencies
To depend on third-party libraries, there are two options. The first is to
drop jars in lib/ (unmanaged dependencies) and the other is to add managed
dependencies, which will look like this in build.sbt :

// Add a single dependency,

 libraryDependencies += "junit" % "junit" % "4.8" % "test"

// Add multiple dependencies.

 libraryDependencies ++= Seq( "net.databinder" %% "dispatch-google" %
"0.7.8", "net.databinder" %% "dispatch-meetup" % "0.7.8"
Adding Plugins
A plugin extends the build definition, most commonly by adding new
settings. The new settings could be new tasks.

My project is in directory sbtDemo, add a plugins.sbt file under
sbtDemo/project/plugins.sbt and add the plugin location as a resolver,
then call addSbtPlugin

addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "2.0.0")

Note : If the plugin isn’t located in one of the default repositories, we
would have to add a resolver ,For ex.

resolvers += Classpaths.typesafeResolver
.....continue
We add plugin for eclipse, now execute command :

> sbt eclipse
[info] Loading project definition from D:sbtDemoproject
[info] Updating {file:/D:/sbtDemo/project/}default-8bffc2...
[info] Resolving com.typesafe.sbteclipse#sbteclipse-plugin;2.0.0 ...
[info] Resolving com.typesafe.sbteclipse#sbteclipse-core;2.0.0 ...
[info] Resolving org.scalaz#scalaz-core_2.9.1;6.0.3 ...
[info] Resolving org.scala-lang#scala-library;2.9.1 ………

All eclipse dependencies are resolved , now my project is ready to
import on eclipse.
Directory Structure of Sbt Project
Base Directory : In sbt's terminology, the "base directory" is the directory containing the
project. So if we created a project sbtDemo , its containing sbtDemo/build.sbt file and
other directories.

Source code : Source code can be placed in the project's base directory as
with sbtDemo/hello.scala.
Multi Project Build
It can be useful to keep multiple related projects in a single build,
especially if they depend on one another and you tend to modify them
together.

Each sub-project in a build has its own src/main/scala, generates its own
jar file when you run package, and in general works like any other
project.
Defining projects in a .scala file
To have multiple projects, you must declare each project and how they relate
in a Build.scala file; there's no way to do it in a .sbt file. However, you can
define settings for each project in .sbt files. Here's an example of a
Build.scala file which defines a root project parent, where the root project
aggregates two sub-projects, child1 and child2 :

import sbt._
import Keys._
object SbtMultiBuild extends Build {
  lazy val parent = Project(id = "sbtmDemo",
                  base = file(".")) aggregate(ch1, ch2)
  lazy val ch1 = Project(id = "c1",
                 base = file("child1"))
  lazy val ch2 = Project(id = "c2",
                 base = file("child2"))
}
…. continue
sbt finds the list of Project objects using reflection, looking for fields with
type Project in the Build object.

For Ex. : I have a main project parent and two sub-project child1 and child2.
Lets quickly started with creating parent. In order to create project execute the
following commands in the sbt session.

D:parent>sbt

>set name :="parent“

>set scalaVersion :="2.9.2“

>Set version :="4.0“

>session save

> exit
………Continue
Projects in the build can be completely independent of one another. For Multi
Project Builds we call a method aggregate(child1, child2).

Note : If we execute sbt clean compile command on console then it create two
sub-directory child1 and child2 by default.It is not contain any project specific
setting.

If we want project specific setting then executing following commands in the
sbt session for sub-project.
D:parentchild1>sbt

>set name :="child1”

>set version :=“1.0”

>set scalaVersion :="2.9.2”

> session save
> exit
……Continue
D:parentchild2>sbt

> set name :="child2"

> set version :=“2.0"

> set scalaVersion :="2.9.2"

> session save

> exit
…… Continue
If we compile our project from root then we can see with main project, sub-
project also compile parallely, It is help full for large project which takes
more time in compilation. So for resolving this problem we can develop our
project under Multi Project Builds. By executing sbt compile command on
console we can see updating all projects at a time.
D:parent>sbt clean compile eclipse
[info] Loading project definition from D:parentproject
[info] Done updating.
[info] Set current project to parent (in build file:/D:/parent/)
[success] Total time: 0 s, completed Jan 25, 2013 2:26:59 PM
[info] Updating {file:/D:/parent/}child2...
[info] Updating {file:/D:/parent/}child1...
[info] Done updating.
[success] Total time: 0 s, completed Jan 25, 2013 2:26:59 PM
[info] About to create Eclipse project files for your project(s).
[info] Successfully created Eclipse project files for project(s): child2, parent
-child1
……Continue
My whole project is in parent and I defined different version in
parentbuild.sbt ,parentchild1build.sbt and parentchild2build.sbt. Now
we can check project version by executing show version command on sbt
session :

D:sbtmDemo>sbt
[info] Loading project definition from D:sbtmDemoproject
[info] Set current project to parent (in build file:/D:/sbtmDemo/)
> show version
[info] c1/*:version
[info] 1.0
[info] c2/*:version
[info] 2.0
[info] sbtmDemo/*:version
[info] 4.0
>
Aggregation
Aggregation means that running a task on the aggregate project ,
aggregation will run the aggregated tasks in parallel and with no defined
ordering. Start up sbt with two subprojects as in the example, and
try compile. We can see that all three projects are compiled at same
time.

In the previous example, we can see the method
call aggregate(ch1,ch2). This aggregates ch1 and ch2 underneath the
parent project.

aggregation will run the aggregated tasks in parallel and with no defined
ordering.
Classpath dependencies
A project may depend on code in another project. This is done by adding
a dependsOn method call. For example, if child1 needed child3 on its
classpath, then we would write in Build.scala:

lazy val ch1 = Project(id = “c1", base = file(“child1"))
dependsOn(child3)
Simple build tool

More Related Content

What's hot

Idiomatic Gradle Plugin Writing
Idiomatic Gradle Plugin WritingIdiomatic Gradle Plugin Writing
Idiomatic Gradle Plugin WritingSchalk Cronjé
 
SFScon 2020 - Hlib Babii - DVC version control your datasets and ML experiments
SFScon 2020 - Hlib Babii - DVC version control your datasets and ML experimentsSFScon 2020 - Hlib Babii - DVC version control your datasets and ML experiments
SFScon 2020 - Hlib Babii - DVC version control your datasets and ML experimentsSouth Tyrol Free Software Conference
 
An Introduction to CMake
An Introduction to CMakeAn Introduction to CMake
An Introduction to CMakeICS
 
Basic Gradle Plugin Writing
Basic Gradle Plugin WritingBasic Gradle Plugin Writing
Basic Gradle Plugin WritingSchalk Cronjé
 
Idiomatic gradle plugin writing
Idiomatic gradle plugin writingIdiomatic gradle plugin writing
Idiomatic gradle plugin writingSchalk Cronjé
 
Ship your Scala code often and easy with Docker
Ship your Scala code often and easy with DockerShip your Scala code often and easy with Docker
Ship your Scala code often and easy with DockerMarcus Lönnberg
 
Continous delivery with sbt
Continous delivery with sbtContinous delivery with sbt
Continous delivery with sbtWojciech Pituła
 
Custom deployments with sbt-native-packager
Custom deployments with sbt-native-packagerCustom deployments with sbt-native-packager
Custom deployments with sbt-native-packagerGaryCoady
 
Binary Packaging for HPC with Spack
Binary Packaging for HPC with SpackBinary Packaging for HPC with Spack
Binary Packaging for HPC with Spackinside-BigData.com
 
Lightweight Developer Provisioning with Gradle and SEU-as-code
Lightweight Developer Provisioning with Gradle and SEU-as-codeLightweight Developer Provisioning with Gradle and SEU-as-code
Lightweight Developer Provisioning with Gradle and SEU-as-codeMario-Leander Reimer
 
Warsaw Frontend Meetup #1 - Webpack
Warsaw Frontend Meetup #1 - WebpackWarsaw Frontend Meetup #1 - Webpack
Warsaw Frontend Meetup #1 - WebpackRadosław Rosłaniec
 
開放運算&GPU技術研究班
開放運算&GPU技術研究班開放運算&GPU技術研究班
開放運算&GPU技術研究班Paul Chao
 
Into The Box 2018 | Content box + docker
Into The Box 2018 | Content box + dockerInto The Box 2018 | Content box + docker
Into The Box 2018 | Content box + dockerOrtus Solutions, Corp
 
Docker - Der Wal in der Kiste
Docker - Der Wal in der KisteDocker - Der Wal in der Kiste
Docker - Der Wal in der KisteUlrich Krause
 
Data Science Workflows using Docker Containers
Data Science Workflows using Docker ContainersData Science Workflows using Docker Containers
Data Science Workflows using Docker ContainersAly Sivji
 
Gradle build tool that rocks with DSL JavaOne India 4th May 2012
Gradle build tool that rocks with DSL JavaOne India 4th May 2012Gradle build tool that rocks with DSL JavaOne India 4th May 2012
Gradle build tool that rocks with DSL JavaOne India 4th May 2012Rajmahendra Hegde
 
Gradle in 45min - JBCN2-16 version
Gradle in 45min - JBCN2-16 versionGradle in 45min - JBCN2-16 version
Gradle in 45min - JBCN2-16 versionSchalk Cronjé
 

What's hot (20)

Idiomatic Gradle Plugin Writing
Idiomatic Gradle Plugin WritingIdiomatic Gradle Plugin Writing
Idiomatic Gradle Plugin Writing
 
SFScon 2020 - Hlib Babii - DVC version control your datasets and ML experiments
SFScon 2020 - Hlib Babii - DVC version control your datasets and ML experimentsSFScon 2020 - Hlib Babii - DVC version control your datasets and ML experiments
SFScon 2020 - Hlib Babii - DVC version control your datasets and ML experiments
 
An Introduction to CMake
An Introduction to CMakeAn Introduction to CMake
An Introduction to CMake
 
Basic Gradle Plugin Writing
Basic Gradle Plugin WritingBasic Gradle Plugin Writing
Basic Gradle Plugin Writing
 
Idiomatic gradle plugin writing
Idiomatic gradle plugin writingIdiomatic gradle plugin writing
Idiomatic gradle plugin writing
 
Ship your Scala code often and easy with Docker
Ship your Scala code often and easy with DockerShip your Scala code often and easy with Docker
Ship your Scala code often and easy with Docker
 
Continous delivery with sbt
Continous delivery with sbtContinous delivery with sbt
Continous delivery with sbt
 
Custom deployments with sbt-native-packager
Custom deployments with sbt-native-packagerCustom deployments with sbt-native-packager
Custom deployments with sbt-native-packager
 
Binary Packaging for HPC with Spack
Binary Packaging for HPC with SpackBinary Packaging for HPC with Spack
Binary Packaging for HPC with Spack
 
Lightweight Developer Provisioning with Gradle and SEU-as-code
Lightweight Developer Provisioning with Gradle and SEU-as-codeLightweight Developer Provisioning with Gradle and SEU-as-code
Lightweight Developer Provisioning with Gradle and SEU-as-code
 
Warsaw Frontend Meetup #1 - Webpack
Warsaw Frontend Meetup #1 - WebpackWarsaw Frontend Meetup #1 - Webpack
Warsaw Frontend Meetup #1 - Webpack
 
Gradle Introduction
Gradle IntroductionGradle Introduction
Gradle Introduction
 
開放運算&GPU技術研究班
開放運算&GPU技術研究班開放運算&GPU技術研究班
開放運算&GPU技術研究班
 
Into The Box 2018 | Content box + docker
Into The Box 2018 | Content box + dockerInto The Box 2018 | Content box + docker
Into The Box 2018 | Content box + docker
 
Gradle in 45min
Gradle in 45minGradle in 45min
Gradle in 45min
 
Docker - Der Wal in der Kiste
Docker - Der Wal in der KisteDocker - Der Wal in der Kiste
Docker - Der Wal in der Kiste
 
Data Science Workflows using Docker Containers
Data Science Workflows using Docker ContainersData Science Workflows using Docker Containers
Data Science Workflows using Docker Containers
 
Gradle build tool that rocks with DSL JavaOne India 4th May 2012
Gradle build tool that rocks with DSL JavaOne India 4th May 2012Gradle build tool that rocks with DSL JavaOne India 4th May 2012
Gradle build tool that rocks with DSL JavaOne India 4th May 2012
 
Gradle in 45min - JBCN2-16 version
Gradle in 45min - JBCN2-16 versionGradle in 45min - JBCN2-16 version
Gradle in 45min - JBCN2-16 version
 
Why Go Lang?
Why Go Lang?Why Go Lang?
Why Go Lang?
 

Viewers also liked

Scala Back to Basics: Type Classes
Scala Back to Basics: Type ClassesScala Back to Basics: Type Classes
Scala Back to Basics: Type ClassesTomer Gabel
 
Sbt - Simple Build Tool
Sbt - Simple Build ToolSbt - Simple Build Tool
Sbt - Simple Build ToolAndré Mayer
 
sbt, past and future / sbt, 傾向と対策
sbt, past and future / sbt, 傾向と対策sbt, past and future / sbt, 傾向と対策
sbt, past and future / sbt, 傾向と対策scalaconfjp
 
Building a Unified Data Pipline in Spark / Apache Sparkを用いたBig Dataパイプラインの統一
Building a Unified Data Pipline in Spark / Apache Sparkを用いたBig Dataパイプラインの統一Building a Unified Data Pipline in Spark / Apache Sparkを用いたBig Dataパイプラインの統一
Building a Unified Data Pipline in Spark / Apache Sparkを用いたBig Dataパイプラインの統一scalaconfjp
 
An introduction to maven gradle and sbt
An introduction to maven gradle and sbtAn introduction to maven gradle and sbt
An introduction to maven gradle and sbtFabio Fumarola
 

Viewers also liked (8)

Scala Back to Basics: Type Classes
Scala Back to Basics: Type ClassesScala Back to Basics: Type Classes
Scala Back to Basics: Type Classes
 
Sbt - Simple Build Tool
Sbt - Simple Build ToolSbt - Simple Build Tool
Sbt - Simple Build Tool
 
A day with sbt
A day with sbtA day with sbt
A day with sbt
 
Sbt
SbtSbt
Sbt
 
SBT Made Simple
SBT Made SimpleSBT Made Simple
SBT Made Simple
 
sbt, past and future / sbt, 傾向と対策
sbt, past and future / sbt, 傾向と対策sbt, past and future / sbt, 傾向と対策
sbt, past and future / sbt, 傾向と対策
 
Building a Unified Data Pipline in Spark / Apache Sparkを用いたBig Dataパイプラインの統一
Building a Unified Data Pipline in Spark / Apache Sparkを用いたBig Dataパイプラインの統一Building a Unified Data Pipline in Spark / Apache Sparkを用いたBig Dataパイプラインの統一
Building a Unified Data Pipline in Spark / Apache Sparkを用いたBig Dataパイプラインの統一
 
An introduction to maven gradle and sbt
An introduction to maven gradle and sbtAn introduction to maven gradle and sbt
An introduction to maven gradle and sbt
 

Similar to Simple build tool

Sbt, idea and eclipse
Sbt, idea and eclipseSbt, idea and eclipse
Sbt, idea and eclipseMike Slinn
 
Getting started with code composer studio v4 for tms320 f2812
Getting started with code composer studio v4 for tms320 f2812Getting started with code composer studio v4 for tms320 f2812
Getting started with code composer studio v4 for tms320 f2812Pantech ProLabs India Pvt Ltd
 
Introduction to Apache Ant
Introduction to Apache AntIntroduction to Apache Ant
Introduction to Apache AntShih-Hsiang Lin
 
How to start using Scala
How to start using ScalaHow to start using Scala
How to start using ScalaNgoc Dao
 
Serverless Container with Source2Image
Serverless Container with Source2ImageServerless Container with Source2Image
Serverless Container with Source2ImageQAware GmbH
 
Serverless containers … with source-to-image
Serverless containers  … with source-to-imageServerless containers  … with source-to-image
Serverless containers … with source-to-imageJosef Adersberger
 
Faster Java EE Builds with Gradle
Faster Java EE Builds with GradleFaster Java EE Builds with Gradle
Faster Java EE Builds with GradleRyan Cuprak
 
Faster Java EE Builds with Gradle
Faster Java EE Builds with GradleFaster Java EE Builds with Gradle
Faster Java EE Builds with GradleRyan Cuprak
 
generate IP CORES
generate IP CORESgenerate IP CORES
generate IP CORESguest296013
 
Gitlab and Lingvokot
Gitlab and LingvokotGitlab and Lingvokot
Gitlab and LingvokotLingvokot
 
How to Improve Your Image Builds Using Advance Docker Build
How to Improve Your Image Builds Using Advance Docker BuildHow to Improve Your Image Builds Using Advance Docker Build
How to Improve Your Image Builds Using Advance Docker BuildDocker, Inc.
 
IBM Index 2018 Conference Workshop: Modernizing Traditional Java App's with D...
IBM Index 2018 Conference Workshop: Modernizing Traditional Java App's with D...IBM Index 2018 Conference Workshop: Modernizing Traditional Java App's with D...
IBM Index 2018 Conference Workshop: Modernizing Traditional Java App's with D...Eric Smalling
 
Recipe to build open splice dds 6.3.xxx Hello World example over Qt 5.2
 Recipe to build open splice dds 6.3.xxx Hello World example over Qt 5.2   Recipe to build open splice dds 6.3.xxx Hello World example over Qt 5.2
Recipe to build open splice dds 6.3.xxx Hello World example over Qt 5.2 Adil Khan
 
Acquia BLT for the Win, or How to speed up the project setup, development an...
Acquia BLT for the Win, or  How to speed up the project setup, development an...Acquia BLT for the Win, or  How to speed up the project setup, development an...
Acquia BLT for the Win, or How to speed up the project setup, development an...DrupalCamp Kyiv
 
3 Ways to Get Started with a React App in 2024.pdf
3 Ways to Get Started with a React App in 2024.pdf3 Ways to Get Started with a React App in 2024.pdf
3 Ways to Get Started with a React App in 2024.pdfBOSC Tech Labs
 

Similar to Simple build tool (20)

Pragmatic sbt
Pragmatic sbtPragmatic sbt
Pragmatic sbt
 
Sbt, idea and eclipse
Sbt, idea and eclipseSbt, idea and eclipse
Sbt, idea and eclipse
 
Getting started with code composer studio v4 for tms320 f2812
Getting started with code composer studio v4 for tms320 f2812Getting started with code composer studio v4 for tms320 f2812
Getting started with code composer studio v4 for tms320 f2812
 
Introduction to Apache Ant
Introduction to Apache AntIntroduction to Apache Ant
Introduction to Apache Ant
 
How to start using Scala
How to start using ScalaHow to start using Scala
How to start using Scala
 
Serverless Container with Source2Image
Serverless Container with Source2ImageServerless Container with Source2Image
Serverless Container with Source2Image
 
Serverless containers … with source-to-image
Serverless containers  … with source-to-imageServerless containers  … with source-to-image
Serverless containers … with source-to-image
 
Gradle como alternativa a maven
Gradle como alternativa a mavenGradle como alternativa a maven
Gradle como alternativa a maven
 
Readme
ReadmeReadme
Readme
 
Faster Java EE Builds with Gradle
Faster Java EE Builds with GradleFaster Java EE Builds with Gradle
Faster Java EE Builds with Gradle
 
Faster Java EE Builds with Gradle
Faster Java EE Builds with GradleFaster Java EE Builds with Gradle
Faster Java EE Builds with Gradle
 
generate IP CORES
generate IP CORESgenerate IP CORES
generate IP CORES
 
Gitlab and Lingvokot
Gitlab and LingvokotGitlab and Lingvokot
Gitlab and Lingvokot
 
How to Improve Your Image Builds Using Advance Docker Build
How to Improve Your Image Builds Using Advance Docker BuildHow to Improve Your Image Builds Using Advance Docker Build
How to Improve Your Image Builds Using Advance Docker Build
 
OpenCms Days 2012 - Developing OpenCms with Gradle
OpenCms Days 2012 - Developing OpenCms with GradleOpenCms Days 2012 - Developing OpenCms with Gradle
OpenCms Days 2012 - Developing OpenCms with Gradle
 
IBM Index 2018 Conference Workshop: Modernizing Traditional Java App's with D...
IBM Index 2018 Conference Workshop: Modernizing Traditional Java App's with D...IBM Index 2018 Conference Workshop: Modernizing Traditional Java App's with D...
IBM Index 2018 Conference Workshop: Modernizing Traditional Java App's with D...
 
Recipe to build open splice dds 6.3.xxx Hello World example over Qt 5.2
 Recipe to build open splice dds 6.3.xxx Hello World example over Qt 5.2   Recipe to build open splice dds 6.3.xxx Hello World example over Qt 5.2
Recipe to build open splice dds 6.3.xxx Hello World example over Qt 5.2
 
Vc++
Vc++Vc++
Vc++
 
Acquia BLT for the Win, or How to speed up the project setup, development an...
Acquia BLT for the Win, or  How to speed up the project setup, development an...Acquia BLT for the Win, or  How to speed up the project setup, development an...
Acquia BLT for the Win, or How to speed up the project setup, development an...
 
3 Ways to Get Started with a React App in 2024.pdf
3 Ways to Get Started with a React App in 2024.pdf3 Ways to Get Started with a React App in 2024.pdf
3 Ways to Get Started with a React App in 2024.pdf
 

More from Knoldus Inc.

GraphQL with .NET Core Microservices.pdf
GraphQL with .NET Core Microservices.pdfGraphQL with .NET Core Microservices.pdf
GraphQL with .NET Core Microservices.pdfKnoldus Inc.
 
NuGet Packages Presentation (DoT NeT).pptx
NuGet Packages Presentation (DoT NeT).pptxNuGet Packages Presentation (DoT NeT).pptx
NuGet Packages Presentation (DoT NeT).pptxKnoldus Inc.
 
Data Quality in Test Automation Navigating the Path to Reliable Testing
Data Quality in Test Automation Navigating the Path to Reliable TestingData Quality in Test Automation Navigating the Path to Reliable Testing
Data Quality in Test Automation Navigating the Path to Reliable TestingKnoldus Inc.
 
K8sGPTThe AI​ way to diagnose Kubernetes
K8sGPTThe AI​ way to diagnose KubernetesK8sGPTThe AI​ way to diagnose Kubernetes
K8sGPTThe AI​ way to diagnose KubernetesKnoldus Inc.
 
Introduction to Circle Ci Presentation.pptx
Introduction to Circle Ci Presentation.pptxIntroduction to Circle Ci Presentation.pptx
Introduction to Circle Ci Presentation.pptxKnoldus Inc.
 
Robusta -Tool Presentation (DevOps).pptx
Robusta -Tool Presentation (DevOps).pptxRobusta -Tool Presentation (DevOps).pptx
Robusta -Tool Presentation (DevOps).pptxKnoldus Inc.
 
Optimizing Kubernetes using GOLDILOCKS.pptx
Optimizing Kubernetes using GOLDILOCKS.pptxOptimizing Kubernetes using GOLDILOCKS.pptx
Optimizing Kubernetes using GOLDILOCKS.pptxKnoldus Inc.
 
Azure Function App Exception Handling.pptx
Azure Function App Exception Handling.pptxAzure Function App Exception Handling.pptx
Azure Function App Exception Handling.pptxKnoldus Inc.
 
CQRS Design Pattern Presentation (Java).pptx
CQRS Design Pattern Presentation (Java).pptxCQRS Design Pattern Presentation (Java).pptx
CQRS Design Pattern Presentation (Java).pptxKnoldus Inc.
 
ETL Observability: Azure to Snowflake Presentation
ETL Observability: Azure to Snowflake PresentationETL Observability: Azure to Snowflake Presentation
ETL Observability: Azure to Snowflake PresentationKnoldus Inc.
 
Scripting with K6 - Beyond the Basics Presentation
Scripting with K6 - Beyond the Basics PresentationScripting with K6 - Beyond the Basics Presentation
Scripting with K6 - Beyond the Basics PresentationKnoldus Inc.
 
Getting started with dotnet core Web APIs
Getting started with dotnet core Web APIsGetting started with dotnet core Web APIs
Getting started with dotnet core Web APIsKnoldus Inc.
 
Introduction To Rust part II Presentation
Introduction To Rust part II PresentationIntroduction To Rust part II Presentation
Introduction To Rust part II PresentationKnoldus Inc.
 
Data governance with Unity Catalog Presentation
Data governance with Unity Catalog PresentationData governance with Unity Catalog Presentation
Data governance with Unity Catalog PresentationKnoldus Inc.
 
Configuring Workflows & Validators in JIRA
Configuring Workflows & Validators in JIRAConfiguring Workflows & Validators in JIRA
Configuring Workflows & Validators in JIRAKnoldus Inc.
 
Advanced Python (with dependency injection and hydra configuration packages)
Advanced Python (with dependency injection and hydra configuration packages)Advanced Python (with dependency injection and hydra configuration packages)
Advanced Python (with dependency injection and hydra configuration packages)Knoldus Inc.
 
Azure Databricks (For Data Analytics).pptx
Azure Databricks (For Data Analytics).pptxAzure Databricks (For Data Analytics).pptx
Azure Databricks (For Data Analytics).pptxKnoldus Inc.
 
The Power of Dependency Injection with Dagger 2 and Kotlin
The Power of Dependency Injection with Dagger 2 and KotlinThe Power of Dependency Injection with Dagger 2 and Kotlin
The Power of Dependency Injection with Dagger 2 and KotlinKnoldus Inc.
 
Data Engineering with Databricks Presentation
Data Engineering with Databricks PresentationData Engineering with Databricks Presentation
Data Engineering with Databricks PresentationKnoldus Inc.
 
Databricks for MLOps Presentation (AI/ML)
Databricks for MLOps Presentation (AI/ML)Databricks for MLOps Presentation (AI/ML)
Databricks for MLOps Presentation (AI/ML)Knoldus Inc.
 

More from Knoldus Inc. (20)

GraphQL with .NET Core Microservices.pdf
GraphQL with .NET Core Microservices.pdfGraphQL with .NET Core Microservices.pdf
GraphQL with .NET Core Microservices.pdf
 
NuGet Packages Presentation (DoT NeT).pptx
NuGet Packages Presentation (DoT NeT).pptxNuGet Packages Presentation (DoT NeT).pptx
NuGet Packages Presentation (DoT NeT).pptx
 
Data Quality in Test Automation Navigating the Path to Reliable Testing
Data Quality in Test Automation Navigating the Path to Reliable TestingData Quality in Test Automation Navigating the Path to Reliable Testing
Data Quality in Test Automation Navigating the Path to Reliable Testing
 
K8sGPTThe AI​ way to diagnose Kubernetes
K8sGPTThe AI​ way to diagnose KubernetesK8sGPTThe AI​ way to diagnose Kubernetes
K8sGPTThe AI​ way to diagnose Kubernetes
 
Introduction to Circle Ci Presentation.pptx
Introduction to Circle Ci Presentation.pptxIntroduction to Circle Ci Presentation.pptx
Introduction to Circle Ci Presentation.pptx
 
Robusta -Tool Presentation (DevOps).pptx
Robusta -Tool Presentation (DevOps).pptxRobusta -Tool Presentation (DevOps).pptx
Robusta -Tool Presentation (DevOps).pptx
 
Optimizing Kubernetes using GOLDILOCKS.pptx
Optimizing Kubernetes using GOLDILOCKS.pptxOptimizing Kubernetes using GOLDILOCKS.pptx
Optimizing Kubernetes using GOLDILOCKS.pptx
 
Azure Function App Exception Handling.pptx
Azure Function App Exception Handling.pptxAzure Function App Exception Handling.pptx
Azure Function App Exception Handling.pptx
 
CQRS Design Pattern Presentation (Java).pptx
CQRS Design Pattern Presentation (Java).pptxCQRS Design Pattern Presentation (Java).pptx
CQRS Design Pattern Presentation (Java).pptx
 
ETL Observability: Azure to Snowflake Presentation
ETL Observability: Azure to Snowflake PresentationETL Observability: Azure to Snowflake Presentation
ETL Observability: Azure to Snowflake Presentation
 
Scripting with K6 - Beyond the Basics Presentation
Scripting with K6 - Beyond the Basics PresentationScripting with K6 - Beyond the Basics Presentation
Scripting with K6 - Beyond the Basics Presentation
 
Getting started with dotnet core Web APIs
Getting started with dotnet core Web APIsGetting started with dotnet core Web APIs
Getting started with dotnet core Web APIs
 
Introduction To Rust part II Presentation
Introduction To Rust part II PresentationIntroduction To Rust part II Presentation
Introduction To Rust part II Presentation
 
Data governance with Unity Catalog Presentation
Data governance with Unity Catalog PresentationData governance with Unity Catalog Presentation
Data governance with Unity Catalog Presentation
 
Configuring Workflows & Validators in JIRA
Configuring Workflows & Validators in JIRAConfiguring Workflows & Validators in JIRA
Configuring Workflows & Validators in JIRA
 
Advanced Python (with dependency injection and hydra configuration packages)
Advanced Python (with dependency injection and hydra configuration packages)Advanced Python (with dependency injection and hydra configuration packages)
Advanced Python (with dependency injection and hydra configuration packages)
 
Azure Databricks (For Data Analytics).pptx
Azure Databricks (For Data Analytics).pptxAzure Databricks (For Data Analytics).pptx
Azure Databricks (For Data Analytics).pptx
 
The Power of Dependency Injection with Dagger 2 and Kotlin
The Power of Dependency Injection with Dagger 2 and KotlinThe Power of Dependency Injection with Dagger 2 and Kotlin
The Power of Dependency Injection with Dagger 2 and Kotlin
 
Data Engineering with Databricks Presentation
Data Engineering with Databricks PresentationData Engineering with Databricks Presentation
Data Engineering with Databricks Presentation
 
Databricks for MLOps Presentation (AI/ML)
Databricks for MLOps Presentation (AI/ML)Databricks for MLOps Presentation (AI/ML)
Databricks for MLOps Presentation (AI/ML)
 

Recently uploaded

Call Girls Cuttack Just Call 9907093804 Top Class Call Girl Service Available
Call Girls Cuttack Just Call 9907093804 Top Class Call Girl Service AvailableCall Girls Cuttack Just Call 9907093804 Top Class Call Girl Service Available
Call Girls Cuttack Just Call 9907093804 Top Class Call Girl Service AvailableDipal Arora
 
Low Rate Call Girls Patna Anika 8250192130 Independent Escort Service Patna
Low Rate Call Girls Patna Anika 8250192130 Independent Escort Service PatnaLow Rate Call Girls Patna Anika 8250192130 Independent Escort Service Patna
Low Rate Call Girls Patna Anika 8250192130 Independent Escort Service Patnamakika9823
 
Call Girl Coimbatore Prisha☎️ 8250192130 Independent Escort Service Coimbatore
Call Girl Coimbatore Prisha☎️  8250192130 Independent Escort Service CoimbatoreCall Girl Coimbatore Prisha☎️  8250192130 Independent Escort Service Coimbatore
Call Girl Coimbatore Prisha☎️ 8250192130 Independent Escort Service Coimbatorenarwatsonia7
 
Aspirin presentation slides by Dr. Rewas Ali
Aspirin presentation slides by Dr. Rewas AliAspirin presentation slides by Dr. Rewas Ali
Aspirin presentation slides by Dr. Rewas AliRewAs ALI
 
Call Girls Service Surat Samaira ❤️🍑 8250192130 👄 Independent Escort Service ...
Call Girls Service Surat Samaira ❤️🍑 8250192130 👄 Independent Escort Service ...Call Girls Service Surat Samaira ❤️🍑 8250192130 👄 Independent Escort Service ...
Call Girls Service Surat Samaira ❤️🍑 8250192130 👄 Independent Escort Service ...CALL GIRLS
 
VIP Mumbai Call Girls Hiranandani Gardens Just Call 9920874524 with A/C Room ...
VIP Mumbai Call Girls Hiranandani Gardens Just Call 9920874524 with A/C Room ...VIP Mumbai Call Girls Hiranandani Gardens Just Call 9920874524 with A/C Room ...
VIP Mumbai Call Girls Hiranandani Gardens Just Call 9920874524 with A/C Room ...Garima Khatri
 
Call Girls Darjeeling Just Call 9907093804 Top Class Call Girl Service Available
Call Girls Darjeeling Just Call 9907093804 Top Class Call Girl Service AvailableCall Girls Darjeeling Just Call 9907093804 Top Class Call Girl Service Available
Call Girls Darjeeling Just Call 9907093804 Top Class Call Girl Service AvailableDipal Arora
 
Bangalore Call Girls Hebbal Kempapura Number 7001035870 Meetin With Bangalor...
Bangalore Call Girls Hebbal Kempapura Number 7001035870  Meetin With Bangalor...Bangalore Call Girls Hebbal Kempapura Number 7001035870  Meetin With Bangalor...
Bangalore Call Girls Hebbal Kempapura Number 7001035870 Meetin With Bangalor...narwatsonia7
 
Russian Escorts Girls Nehru Place ZINATHI 🔝9711199012 ☪ 24/7 Call Girls Delhi
Russian Escorts Girls  Nehru Place ZINATHI 🔝9711199012 ☪ 24/7 Call Girls DelhiRussian Escorts Girls  Nehru Place ZINATHI 🔝9711199012 ☪ 24/7 Call Girls Delhi
Russian Escorts Girls Nehru Place ZINATHI 🔝9711199012 ☪ 24/7 Call Girls DelhiAlinaDevecerski
 
Kesar Bagh Call Girl Price 9548273370 , Lucknow Call Girls Service
Kesar Bagh Call Girl Price 9548273370 , Lucknow Call Girls ServiceKesar Bagh Call Girl Price 9548273370 , Lucknow Call Girls Service
Kesar Bagh Call Girl Price 9548273370 , Lucknow Call Girls Servicemakika9823
 
Russian Call Girls in Pune Riya 9907093804 Short 1500 Night 6000 Best call gi...
Russian Call Girls in Pune Riya 9907093804 Short 1500 Night 6000 Best call gi...Russian Call Girls in Pune Riya 9907093804 Short 1500 Night 6000 Best call gi...
Russian Call Girls in Pune Riya 9907093804 Short 1500 Night 6000 Best call gi...Miss joya
 
Bangalore Call Girls Marathahalli 📞 9907093804 High Profile Service 100% Safe
Bangalore Call Girls Marathahalli 📞 9907093804 High Profile Service 100% SafeBangalore Call Girls Marathahalli 📞 9907093804 High Profile Service 100% Safe
Bangalore Call Girls Marathahalli 📞 9907093804 High Profile Service 100% Safenarwatsonia7
 
Low Rate Call Girls Pune Esha 9907093804 Short 1500 Night 6000 Best call girl...
Low Rate Call Girls Pune Esha 9907093804 Short 1500 Night 6000 Best call girl...Low Rate Call Girls Pune Esha 9907093804 Short 1500 Night 6000 Best call girl...
Low Rate Call Girls Pune Esha 9907093804 Short 1500 Night 6000 Best call girl...Miss joya
 
VIP Call Girls Pune Vani 9907093804 Short 1500 Night 6000 Best call girls Ser...
VIP Call Girls Pune Vani 9907093804 Short 1500 Night 6000 Best call girls Ser...VIP Call Girls Pune Vani 9907093804 Short 1500 Night 6000 Best call girls Ser...
VIP Call Girls Pune Vani 9907093804 Short 1500 Night 6000 Best call girls Ser...Miss joya
 
VIP Russian Call Girls in Varanasi Samaira 8250192130 Independent Escort Serv...
VIP Russian Call Girls in Varanasi Samaira 8250192130 Independent Escort Serv...VIP Russian Call Girls in Varanasi Samaira 8250192130 Independent Escort Serv...
VIP Russian Call Girls in Varanasi Samaira 8250192130 Independent Escort Serv...Neha Kaur
 
Call Girls Service Pune Vaishnavi 9907093804 Short 1500 Night 6000 Best call ...
Call Girls Service Pune Vaishnavi 9907093804 Short 1500 Night 6000 Best call ...Call Girls Service Pune Vaishnavi 9907093804 Short 1500 Night 6000 Best call ...
Call Girls Service Pune Vaishnavi 9907093804 Short 1500 Night 6000 Best call ...Miss joya
 
♛VVIP Hyderabad Call Girls Chintalkunta🖕7001035870🖕Riya Kappor Top Call Girl ...
♛VVIP Hyderabad Call Girls Chintalkunta🖕7001035870🖕Riya Kappor Top Call Girl ...♛VVIP Hyderabad Call Girls Chintalkunta🖕7001035870🖕Riya Kappor Top Call Girl ...
♛VVIP Hyderabad Call Girls Chintalkunta🖕7001035870🖕Riya Kappor Top Call Girl ...astropune
 
VIP Call Girls Tirunelveli Aaradhya 8250192130 Independent Escort Service Tir...
VIP Call Girls Tirunelveli Aaradhya 8250192130 Independent Escort Service Tir...VIP Call Girls Tirunelveli Aaradhya 8250192130 Independent Escort Service Tir...
VIP Call Girls Tirunelveli Aaradhya 8250192130 Independent Escort Service Tir...narwatsonia7
 
CALL ON ➥9907093804 🔝 Call Girls Hadapsar ( Pune) Girls Service
CALL ON ➥9907093804 🔝 Call Girls Hadapsar ( Pune)  Girls ServiceCALL ON ➥9907093804 🔝 Call Girls Hadapsar ( Pune)  Girls Service
CALL ON ➥9907093804 🔝 Call Girls Hadapsar ( Pune) Girls ServiceMiss joya
 
Call Girls Service In Shyam Nagar Whatsapp 8445551418 Independent Escort Service
Call Girls Service In Shyam Nagar Whatsapp 8445551418 Independent Escort ServiceCall Girls Service In Shyam Nagar Whatsapp 8445551418 Independent Escort Service
Call Girls Service In Shyam Nagar Whatsapp 8445551418 Independent Escort Serviceparulsinha
 

Recently uploaded (20)

Call Girls Cuttack Just Call 9907093804 Top Class Call Girl Service Available
Call Girls Cuttack Just Call 9907093804 Top Class Call Girl Service AvailableCall Girls Cuttack Just Call 9907093804 Top Class Call Girl Service Available
Call Girls Cuttack Just Call 9907093804 Top Class Call Girl Service Available
 
Low Rate Call Girls Patna Anika 8250192130 Independent Escort Service Patna
Low Rate Call Girls Patna Anika 8250192130 Independent Escort Service PatnaLow Rate Call Girls Patna Anika 8250192130 Independent Escort Service Patna
Low Rate Call Girls Patna Anika 8250192130 Independent Escort Service Patna
 
Call Girl Coimbatore Prisha☎️ 8250192130 Independent Escort Service Coimbatore
Call Girl Coimbatore Prisha☎️  8250192130 Independent Escort Service CoimbatoreCall Girl Coimbatore Prisha☎️  8250192130 Independent Escort Service Coimbatore
Call Girl Coimbatore Prisha☎️ 8250192130 Independent Escort Service Coimbatore
 
Aspirin presentation slides by Dr. Rewas Ali
Aspirin presentation slides by Dr. Rewas AliAspirin presentation slides by Dr. Rewas Ali
Aspirin presentation slides by Dr. Rewas Ali
 
Call Girls Service Surat Samaira ❤️🍑 8250192130 👄 Independent Escort Service ...
Call Girls Service Surat Samaira ❤️🍑 8250192130 👄 Independent Escort Service ...Call Girls Service Surat Samaira ❤️🍑 8250192130 👄 Independent Escort Service ...
Call Girls Service Surat Samaira ❤️🍑 8250192130 👄 Independent Escort Service ...
 
VIP Mumbai Call Girls Hiranandani Gardens Just Call 9920874524 with A/C Room ...
VIP Mumbai Call Girls Hiranandani Gardens Just Call 9920874524 with A/C Room ...VIP Mumbai Call Girls Hiranandani Gardens Just Call 9920874524 with A/C Room ...
VIP Mumbai Call Girls Hiranandani Gardens Just Call 9920874524 with A/C Room ...
 
Call Girls Darjeeling Just Call 9907093804 Top Class Call Girl Service Available
Call Girls Darjeeling Just Call 9907093804 Top Class Call Girl Service AvailableCall Girls Darjeeling Just Call 9907093804 Top Class Call Girl Service Available
Call Girls Darjeeling Just Call 9907093804 Top Class Call Girl Service Available
 
Bangalore Call Girls Hebbal Kempapura Number 7001035870 Meetin With Bangalor...
Bangalore Call Girls Hebbal Kempapura Number 7001035870  Meetin With Bangalor...Bangalore Call Girls Hebbal Kempapura Number 7001035870  Meetin With Bangalor...
Bangalore Call Girls Hebbal Kempapura Number 7001035870 Meetin With Bangalor...
 
Russian Escorts Girls Nehru Place ZINATHI 🔝9711199012 ☪ 24/7 Call Girls Delhi
Russian Escorts Girls  Nehru Place ZINATHI 🔝9711199012 ☪ 24/7 Call Girls DelhiRussian Escorts Girls  Nehru Place ZINATHI 🔝9711199012 ☪ 24/7 Call Girls Delhi
Russian Escorts Girls Nehru Place ZINATHI 🔝9711199012 ☪ 24/7 Call Girls Delhi
 
Kesar Bagh Call Girl Price 9548273370 , Lucknow Call Girls Service
Kesar Bagh Call Girl Price 9548273370 , Lucknow Call Girls ServiceKesar Bagh Call Girl Price 9548273370 , Lucknow Call Girls Service
Kesar Bagh Call Girl Price 9548273370 , Lucknow Call Girls Service
 
Russian Call Girls in Pune Riya 9907093804 Short 1500 Night 6000 Best call gi...
Russian Call Girls in Pune Riya 9907093804 Short 1500 Night 6000 Best call gi...Russian Call Girls in Pune Riya 9907093804 Short 1500 Night 6000 Best call gi...
Russian Call Girls in Pune Riya 9907093804 Short 1500 Night 6000 Best call gi...
 
Bangalore Call Girls Marathahalli 📞 9907093804 High Profile Service 100% Safe
Bangalore Call Girls Marathahalli 📞 9907093804 High Profile Service 100% SafeBangalore Call Girls Marathahalli 📞 9907093804 High Profile Service 100% Safe
Bangalore Call Girls Marathahalli 📞 9907093804 High Profile Service 100% Safe
 
Low Rate Call Girls Pune Esha 9907093804 Short 1500 Night 6000 Best call girl...
Low Rate Call Girls Pune Esha 9907093804 Short 1500 Night 6000 Best call girl...Low Rate Call Girls Pune Esha 9907093804 Short 1500 Night 6000 Best call girl...
Low Rate Call Girls Pune Esha 9907093804 Short 1500 Night 6000 Best call girl...
 
VIP Call Girls Pune Vani 9907093804 Short 1500 Night 6000 Best call girls Ser...
VIP Call Girls Pune Vani 9907093804 Short 1500 Night 6000 Best call girls Ser...VIP Call Girls Pune Vani 9907093804 Short 1500 Night 6000 Best call girls Ser...
VIP Call Girls Pune Vani 9907093804 Short 1500 Night 6000 Best call girls Ser...
 
VIP Russian Call Girls in Varanasi Samaira 8250192130 Independent Escort Serv...
VIP Russian Call Girls in Varanasi Samaira 8250192130 Independent Escort Serv...VIP Russian Call Girls in Varanasi Samaira 8250192130 Independent Escort Serv...
VIP Russian Call Girls in Varanasi Samaira 8250192130 Independent Escort Serv...
 
Call Girls Service Pune Vaishnavi 9907093804 Short 1500 Night 6000 Best call ...
Call Girls Service Pune Vaishnavi 9907093804 Short 1500 Night 6000 Best call ...Call Girls Service Pune Vaishnavi 9907093804 Short 1500 Night 6000 Best call ...
Call Girls Service Pune Vaishnavi 9907093804 Short 1500 Night 6000 Best call ...
 
♛VVIP Hyderabad Call Girls Chintalkunta🖕7001035870🖕Riya Kappor Top Call Girl ...
♛VVIP Hyderabad Call Girls Chintalkunta🖕7001035870🖕Riya Kappor Top Call Girl ...♛VVIP Hyderabad Call Girls Chintalkunta🖕7001035870🖕Riya Kappor Top Call Girl ...
♛VVIP Hyderabad Call Girls Chintalkunta🖕7001035870🖕Riya Kappor Top Call Girl ...
 
VIP Call Girls Tirunelveli Aaradhya 8250192130 Independent Escort Service Tir...
VIP Call Girls Tirunelveli Aaradhya 8250192130 Independent Escort Service Tir...VIP Call Girls Tirunelveli Aaradhya 8250192130 Independent Escort Service Tir...
VIP Call Girls Tirunelveli Aaradhya 8250192130 Independent Escort Service Tir...
 
CALL ON ➥9907093804 🔝 Call Girls Hadapsar ( Pune) Girls Service
CALL ON ➥9907093804 🔝 Call Girls Hadapsar ( Pune)  Girls ServiceCALL ON ➥9907093804 🔝 Call Girls Hadapsar ( Pune)  Girls Service
CALL ON ➥9907093804 🔝 Call Girls Hadapsar ( Pune) Girls Service
 
Call Girls Service In Shyam Nagar Whatsapp 8445551418 Independent Escort Service
Call Girls Service In Shyam Nagar Whatsapp 8445551418 Independent Escort ServiceCall Girls Service In Shyam Nagar Whatsapp 8445551418 Independent Escort Service
Call Girls Service In Shyam Nagar Whatsapp 8445551418 Independent Escort Service
 

Simple build tool

  • 1.    Simple Build Tool Anuj Pratap Singh Software Consultant Knoldus Software LLP
  • 2. AGENDA  What is Simple Build Tool (SBT)  Installation Of SBT  Features of SBT  Creating a simple project with SBT  Multi project build with SBT
  • 3. What is SBT  Simple Build Tool (sbt) is an open source build tool , It is a best choice for Scala projects that aims to do the basics well. It requires Java 1.6 or later. ➢ SBT uses a small number of concepts to support flexible and powerful build definitions. ➢ An sbt build definition can contain files ending in .sbt.
  • 4. Installation of SBT ➢ Sbt comes pre-built with several available packages for different operating systems. ➢ Mac : Use below command to install Sbt. $ port install sbt ➢ Linux : Download sbt-launch.jar and place it in ~/bin and create a script for run above jar. java -Xms512M -Xmx1536M -Xss1M -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=384M -jar `dirname $0`/sbt-launch.jar "$@“  Windows : Create a batch file sbt.bat which contains following script $ set SCRIPT_DIR=%~dp0 $ java -Xmx512M -jar "%SCRIPT_DIR %sbt-launch.jar" %*
  • 5. Features Of SBT  Native support for compiling Scala code and integrating with many Scala test frameworks .  Build descriptions written in Scala using a DSL (Domain Specific Language).  Support for mixed Java/Scala projects .  Multi project build support  Does dependency management  Interactive shell
  • 6. Creating SBT Project Projects will need some manual setup. Basic build settings go in a file called build.sbt, located in the project's base directory. For example, my project is in the directory sbtDemo, in sbtDemo/build.sbt I have to write: D:>mkdir sbtDemo D:>cd sbtDemo D:sbtDemo>sbt [info] Set current project to default-d0025a (in build file:/D:/sbtDemo/) >
  • 7. Build Defnition Basic build setting giving as below on sbt console : D:sbtDemo>sbt [info] Set current project to default-d0025a (in build file:/D:/sbtDemo/) > set name :="hello" [info] Reapplying settings... [info] Set current project to hello (in build file:/D:/sbtDemo/) > set version :="1.0" [info] Reapplying settings... [info] Set current project to hello (in build file:/D:/sbtDemo/) > set scalaVersion :="2.9.2" [info] Reapplying settings... [info] Set current project to hello (in build file:/D:/sbtDemo/) > session save [info] Reapplying settings... [info] Set current project to hello (in build file:/D:/sbtDemo/) > exit D:sbtDemo>
  • 8. ….....continue In previous setting, On the left, name, version, and scalaVersion are keys. A key is an instance of SettingKey[T], TaskKey[T], or InputKey[T] where T is the expected value type. Note : we should also be add resolver in build.sbt file . resolvers += "Typesafe Repo" at "http://repo.typesafe.com/typesafe/releases/" Settings are separated by blank lines If we open build.sbt file then we noticed the blank line between every item. This isn't just for show; they're actually required in order to separate each item. sbt needs some kind of delimiter to tell where one expression stops and the next begins. Settings are key initialization pair , for ex. name := “sbtDemo” Key Initialization
  • 9. Types Of Keys The built-in keys are just fields in an object called Keys. A build.sbt implicitly has an import sbt.Keys._, so sbt.Keys.name can be referred to as name. There are three flavors of key:  Setting Key[T]: a key with a value computed once (the value is computed one time when loading the project, and kept around).  Task Key[T]: a key with a value that has to be recomputed each time, potentially creating side effects and its said to define a task.  Input Key[T]: a task key which has command line arguments as input.
  • 10. Adding library dependencies To depend on third-party libraries, there are two options. The first is to drop jars in lib/ (unmanaged dependencies) and the other is to add managed dependencies, which will look like this in build.sbt : // Add a single dependency,  libraryDependencies += "junit" % "junit" % "4.8" % "test" // Add multiple dependencies.  libraryDependencies ++= Seq( "net.databinder" %% "dispatch-google" % "0.7.8", "net.databinder" %% "dispatch-meetup" % "0.7.8"
  • 11. Adding Plugins A plugin extends the build definition, most commonly by adding new settings. The new settings could be new tasks. My project is in directory sbtDemo, add a plugins.sbt file under sbtDemo/project/plugins.sbt and add the plugin location as a resolver, then call addSbtPlugin addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "2.0.0") Note : If the plugin isn’t located in one of the default repositories, we would have to add a resolver ,For ex. resolvers += Classpaths.typesafeResolver
  • 12. .....continue We add plugin for eclipse, now execute command : > sbt eclipse [info] Loading project definition from D:sbtDemoproject [info] Updating {file:/D:/sbtDemo/project/}default-8bffc2... [info] Resolving com.typesafe.sbteclipse#sbteclipse-plugin;2.0.0 ... [info] Resolving com.typesafe.sbteclipse#sbteclipse-core;2.0.0 ... [info] Resolving org.scalaz#scalaz-core_2.9.1;6.0.3 ... [info] Resolving org.scala-lang#scala-library;2.9.1 ……… All eclipse dependencies are resolved , now my project is ready to import on eclipse.
  • 13. Directory Structure of Sbt Project Base Directory : In sbt's terminology, the "base directory" is the directory containing the project. So if we created a project sbtDemo , its containing sbtDemo/build.sbt file and other directories. Source code : Source code can be placed in the project's base directory as with sbtDemo/hello.scala.
  • 14. Multi Project Build It can be useful to keep multiple related projects in a single build, especially if they depend on one another and you tend to modify them together. Each sub-project in a build has its own src/main/scala, generates its own jar file when you run package, and in general works like any other project.
  • 15. Defining projects in a .scala file To have multiple projects, you must declare each project and how they relate in a Build.scala file; there's no way to do it in a .sbt file. However, you can define settings for each project in .sbt files. Here's an example of a Build.scala file which defines a root project parent, where the root project aggregates two sub-projects, child1 and child2 : import sbt._ import Keys._ object SbtMultiBuild extends Build { lazy val parent = Project(id = "sbtmDemo", base = file(".")) aggregate(ch1, ch2) lazy val ch1 = Project(id = "c1", base = file("child1")) lazy val ch2 = Project(id = "c2", base = file("child2")) }
  • 16. …. continue sbt finds the list of Project objects using reflection, looking for fields with type Project in the Build object. For Ex. : I have a main project parent and two sub-project child1 and child2. Lets quickly started with creating parent. In order to create project execute the following commands in the sbt session. D:parent>sbt >set name :="parent“ >set scalaVersion :="2.9.2“ >Set version :="4.0“ >session save > exit
  • 17. ………Continue Projects in the build can be completely independent of one another. For Multi Project Builds we call a method aggregate(child1, child2). Note : If we execute sbt clean compile command on console then it create two sub-directory child1 and child2 by default.It is not contain any project specific setting. If we want project specific setting then executing following commands in the sbt session for sub-project. D:parentchild1>sbt >set name :="child1” >set version :=“1.0” >set scalaVersion :="2.9.2” > session save > exit
  • 18. ……Continue D:parentchild2>sbt > set name :="child2" > set version :=“2.0" > set scalaVersion :="2.9.2" > session save > exit
  • 19. …… Continue If we compile our project from root then we can see with main project, sub- project also compile parallely, It is help full for large project which takes more time in compilation. So for resolving this problem we can develop our project under Multi Project Builds. By executing sbt compile command on console we can see updating all projects at a time. D:parent>sbt clean compile eclipse [info] Loading project definition from D:parentproject [info] Done updating. [info] Set current project to parent (in build file:/D:/parent/) [success] Total time: 0 s, completed Jan 25, 2013 2:26:59 PM [info] Updating {file:/D:/parent/}child2... [info] Updating {file:/D:/parent/}child1... [info] Done updating. [success] Total time: 0 s, completed Jan 25, 2013 2:26:59 PM [info] About to create Eclipse project files for your project(s). [info] Successfully created Eclipse project files for project(s): child2, parent -child1
  • 20. ……Continue My whole project is in parent and I defined different version in parentbuild.sbt ,parentchild1build.sbt and parentchild2build.sbt. Now we can check project version by executing show version command on sbt session : D:sbtmDemo>sbt [info] Loading project definition from D:sbtmDemoproject [info] Set current project to parent (in build file:/D:/sbtmDemo/) > show version [info] c1/*:version [info] 1.0 [info] c2/*:version [info] 2.0 [info] sbtmDemo/*:version [info] 4.0 >
  • 21. Aggregation Aggregation means that running a task on the aggregate project , aggregation will run the aggregated tasks in parallel and with no defined ordering. Start up sbt with two subprojects as in the example, and try compile. We can see that all three projects are compiled at same time. In the previous example, we can see the method call aggregate(ch1,ch2). This aggregates ch1 and ch2 underneath the parent project. aggregation will run the aggregated tasks in parallel and with no defined ordering.
  • 22. Classpath dependencies A project may depend on code in another project. This is done by adding a dependsOn method call. For example, if child1 needed child3 on its classpath, then we would write in Build.scala: lazy val ch1 = Project(id = “c1", base = file(“child1")) dependsOn(child3)