Gradle vs sbt: qual build tool JVM/Scala para CI?
Gradle é a build tool JVM de propósito geral com cache remoto; sbt é nativo de Scala com compilação incremental ajustada para o compilador Scala.
Gradle é uma build tool JVM flexível (DSL Groovy/Kotlin) com builds incrementais a nível de task e um build cache local/remoto, utilizável para Java, Kotlin e Scala. sbt é a build tool nativa de Scala com forte compilação incremental e um shell interativo.
| Gradle | sbt | |
|---|---|---|
| Linguagem principal | Java/Kotlin/Scala | Scala-first |
| Config | DSL Groovy/Kotlin | DSL Scala (build.sbt) |
| Builds incrementais | A nível de task | Fortes (compilador Zinc) |
| Build cache | Local + remoto | Local (incremental) |
| Melhor para | JVM misto, poliglota | Projetos Scala |
No CI
Para projetos pesados em Scala, a compilação incremental baseada em Zinc do sbt é finamente ajustada e o ecossistema a espera. Gradle é a escolha mais ampla para builds JVM/poliglota mistos e oferece um build cache remoto compartilhado entre jobs de CI, o que é um grande ganho de velocidade para repos multi-módulo grandes. Escolha sbt para bases de código Scala-first, Gradle quando quiser uma única ferramenta entre linguagens com cache remoto.
Faça cache
Faça cache dos caches de dependências e de build com chave nos seus arquivos de build, e para o Gradle configure um build cache remoto entre jobs de CI. Ambos rodam em runners de CI; runners gerenciados mais rápidos encurtam os passos que ainda executam em um cache miss, e compilações Scala são pesadas.
O veredito
Projeto Scala-first: sbt pela sua compilação incremental ajustada. Builds JVM mistos/poliglota querendo um cache remoto: Gradle. Faça cache de dependências e builds em qualquer um; compilações Scala se beneficiam mais de runners rápidos.