Introduction à SBT
SBT
Autrefois Scala Build Tool
Renommé en Simple Build Tool
CBT se veut le successeur de SBT mais est encore
jeune
Les autres outils de build
Sur la JVM on a principalement
A quoi ça sert ?
Gère à la fois :
Compilation
Tests
Dépendances
Autres fonctionnalités avec l'utilisation de plugins
Ajout de taches spécifiques
Installation
brew install sbt@1
Mac
apt-get install sbt
Debian
yum install sbt
RedHat
Download MSI ...
Windows
Onboarding
echo 'name :="slug"'>build.sbt
Pour créer un projet
“Time for demo”
Lancement
sbt
Pour lancer sbt, se placer dans le projet
compile
Compiler
Fichier build.sbt
build.sbt
Décrit le build
reload
Pour recharger
set ThisBuild / scalaVersion := "2.12.6"
session save
Pour sauvegarder une session interactive
Setup classique
mkdir -p src/main/scala
mkdir -p src/test/scala
Structure code standard (hors Play)
Structure SBT
tree project
Répertoire project
tree -d -L2 target
Répertoire target
Ajoutons du code
object Main extends App {
println("Hello Slug !!!")
}
Fichier Main
Tests
libraryDependencies += "org.scalatest" %% "scalatest" % "3.0.5"
Fichier build.sbt
test
Lancer les tests
testQuick
Lancer les tests (sauf ceux qui ont déjà réussi)
Ajouter un test
import org.scalatest._
class SlugSpec extends FunSuite with DiagrammedAssertions {
test("Slug should start with S"){
assert("Slug".startsWith("S"))
}
}
Fichier SlugSpec.scala
REPL
Pour lancer le REPL
console
consoleQuick
Avec uniquement les dépendances en classpath
consoleProject
Avec le projet SBT en classpath
File watch
Permet de surveiller les fichiers
~compile
~test
Fonctionne avec toutes les taches
~compileTestAndDeployToProd
Vraiment toutes les taches
Multi-module
Déclaration des projets
val scalaTest = "org.scalatest" %% "scalatest" % "3.0.5"
lazy val slug = (project in file("."))
.aggregate(slugDomain)
.settings(
name := "slug",
libraryDependencies += scalaTest % Test
)
lazy val slugDomain = (project in file("domain"))
.settings(
name := "slugDomain",
libraryDependencies += scalaTest % Test
)
Plugins
De nombreux plugins existent pour
Créer un livrable
S'interfacer avec git
Lancer des tests
Analyse statique
Déployer du code
Générer de la doc
Manipuler une BDD
....
Ajouter un plugin
addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "1.3.4")
Fichier project/plugins.sbt
lazy val slug = (project in file("."))
.enablePlugins(JavaAppPackaging)
Fichier build.sbt
Native packager
Créer un zip exécutable sur Windows et Unix
dist
cd /tmp
unzip <created_zip>
./bin/slug
Lancer l'exécutable
Native packager
Créer une image Docker en local
Docker/publishLocal
docker run slug:0.1.0-SNAPSHOT
Lancer l'image
Plugin git
addSbtPlugin("com.typesafe.sbt" % "sbt-git" % "1.0.0")
Fichier project/plugins.sbt
lazy val slug = (project in file("."))
.enablePlugins(GitVersioning)
...
git.useGitDescribe := true,
Fichier build.sbt
Plugin git
git tag v1.0.0
Positionner un tag
version
Afficher la version
Merci !!! 🙏
29-31 octobre 2018
Tarif regular - 100€

Introduction à SBT