Skip to content
Latchkey

sbt vs Maven: Qual ferramenta de build para CI Scala?

O sbt é a ferramenta de build nativa de Scala com compilação incremental rápida; o Maven é o padrão JVM orientado a convenção.

O sbt (the Scala Build Tool) oferece uma DSL em Scala, um shell interativo e compilação incremental baseada em Zinc ajustada para Scala. O Maven usa XML declarativo e convenção, com amplo suporte ao ecossistema JVM e plugins para Scala.

sbtMaven
ConfiguraçãoDSL em Scala (build.sbt)XML (pom.xml), declarativo
Compilação incrementalForte (Zinc)Limitada (via plugins)
Foco em ScalaNativoVia scala-maven-plugin
Shell interativoSim (sbt console)Não
Curva de aprendizadoMaior (para devs não Scala)Menor

No CI

O compilador incremental Zinc do sbt e seu tooling ciente de Scala o tornam a escolha natural para projetos com muito Scala, e um estado incremental quente pode acelerar os loops locais. Em runners de CI efêmeros, boa parte da vantagem incremental depende de fazer cache da saída do compilador entre execuções. O Maven é mais simples e mais previsível, integra-se de forma limpa com stacks JVM de múltiplas linguagens e é fácil para equipes que já o conhecem.

Faça cache no CI

Faça cache do cache Ivy/Coursier e das saídas de build em target/ para o sbt, ou de ~/.m2/repository para o Maven, com chave na sua definição de build. Persistir o estado de compilação incremental entre execuções de CI é onde o sbt recupera sua vantagem de velocidade.

O veredito

Projeto Scala em primeiro lugar que quer tooling nativo e compilações incrementais rápidas: sbt. Stack JVM mista ou uma equipe que valoriza a convenção e a simplicidade do Maven: Maven. Faça cache das dependências e do estado de build em qualquer um para manter o CI rápido.

Guias relacionados