- Instalación y primer arranque
descargar sbt launcher desde http://www.scala-sbt.org/
hay versión zip y msi
yo prefiero zip y añado manualmente al path, así puedo tener varias versiones, o probar con seguridad una nueva sin romper proyectos…
ejecutar el comando:
sbt
ahora es cuando se descarga realmente sbt, ya que lo que te bajas es un launcher
todo se queda descargado en %USERPROFILE%\.sbt
curiosidad: sbt usa el modelo de repositorio de Ivy
por defecto sbt asume que el proyecto está en el directorio desde donde lo hemos invocado, así que mejor tener creado primero el proyecto
cerramos con el comando:
exit
creamos el proyecto:
cd <your-workspace-home>
mkdir scalafirst
cd scalafirst
creamos el fichero build.sbt con el siguiente contenido
name := "scalafirst"
scalaVersion := "2.11.8"
ejecutamos de nuevo el comando:
sbt
como hay un fichero de build con una versión de Scala, se la descarga (si no la tenías ya)
creamos el fichero src\main\scala\scalafirst\HelloScala.scala con el siguiente contenido
package scalafirst
object ClassicFirstProgram {
def main(args: Array[String]): Unit = {
println("Hello to the world of Scala!")
}
}
dentro de sbt ejecutamos:
compile
run
también se puede lanzar directamente run y se compilan automáticamente los cambios si los hubiera
si en lugar de ejecutar el comando de forma sencilla se ejecuta con tilde delante, así:
~run
sbt estará monitorizando la carpeta del proyecto y re-compilando y re-ejecutando ante cada cambio
aunque lo anterior es muy útil, aún lo es más si lo que lanzas automáticamente son las pruebas del proyecto:
~test
- Añadiendo pruebas
para añadir pruebas, primero debemos elegir el framework de prueba que se ajusta a nuestro estilo y necesidades
uno de los más utilizados es ScalaTest
para empezar a usarlo, añadimos la siguiente dependencia al fichero build.sbt
libraryDependencies += "org.scalatest" %% "scalatest" % "3.0.1" % "test"
creemos una clase sencilla sobre la que realizar pruebas, p.ej. creamos la clase Rational en el fichero src\main\scala\scalafirst\Rational.scala
package scalafirst
class Rational(n: Int, d: Int) {
private val g = gcd(n.abs, d.abs)
val num: Int = n
val den: Int = d
require(den != 0) // IllegalArgumentException si no se cumple la condición
override def toString = num + "/" + den
def this(n: Int) = this(n, 1) // si el denominador no se indica, se asume 1
private def gcd(a: Int, b: Int): Int = // definición del máximo común divisor
if (b == 0) a else gcd(b, a % b)
def +(other: Rational): Rational =
new Rational(num * other.den + den * other.num, den * other.den)
def -(other: Rational): Rational =
new Rational(num * other.den - den * other.num, den * other.den)
def *(other: Rational): Rational =
new Rational(num * other.num, den * other.den)
def /(other: Rational): Rational =
new Rational(num * other.den, den * other.num)
// to-do: al comparar dos racionales, deberían ser iguales si son fracciones equivalentes
}
ahora creamos la clase de pruebas correspondiente, en este caso src\test\scala\scalafirt\RationalSpec.scala
package scalafirst
import org.scalatest._
class RationalSpec extends FlatSpec {
"A rational with denominator 1" should "be equal to a natural number" in {
val rat1 = new Rational(5)
val rat2 = new Rational(5, 1)
assert(rat1.toString === rat2.toString)
}
"A rational with denominator 0" should "not be allowed as it is not a valid rational" in {
assertThrows[IllegalArgumentException] {
new Rational(5, 0)
}
}
}
y desde sbt ejecutamos el comando:
~test
y veremos cómo se ejecutan las pruebas y de forma automática se re-ejecutan si cambia algún fuente del proyecto.
Otra opción es descargarlo manualmente via
sbt-launcher.jar
http://www.scala-sbt.org/0.13/docs/Manual-Installation.html
De esta manera, podemos añadir la versión de sbt para el proyecto en
build.properties
. De esta manera, la estructura del proyecto SBT queda como: