scala maven sbt

Pros y contras del uso de sbt vs maven en el proyecto Scala



(2)

¿Qué herramienta de compilación es la mejor para Scala? ¿Cuáles son los pros y los contras de cada uno de ellos? ¿Cómo puedo determinar cuál de ellos usar en un proyecto?


Estamos utilizando Maven para construir proyectos de Scala en el trabajo porque se integra bien con nuestro servidor de CI. Podríamos simplemente ejecutar un script de shell para iniciar una compilación, por supuesto, pero tenemos un montón de otra información que sale de Maven y queremos entrar en CI. Esa es la única razón por la que se me ocurre usar Maven para un proyecto de Scala.

De lo contrario, solo usa SBT. Tienes acceso a las mismas dependencias (realmente la mejor parte de maven, en mi humilde opinión). También obtienes la compilación incremental, que es enorme. La capacidad de iniciar un shell dentro de su proyecto, que también es excelente.

ScalaMock solo funciona con SBT, y es probable que desee utilizar eso en lugar de una biblioteca de burla de Java. Además de eso, es mucho más fácil extender SBT ya que puedes escribir código scala completo en el archivo de compilación, para que no tengas que pasar por todo el rigamarole de escribir un Mojo.

En resumen, simplemente use SBT a menos que realmente necesite una estrecha integración en su servidor de CI.


La pregunta corre el riesgo de generar muchas opiniones; sería mejor tener una lista clara de requisitos o una descripción de su entorno, conocimientos previos, etc.

FWIW, hay más opiniones en este hilo de la lista de correo de scala .

Mis 2c son: Vaya con sbt si no tiene requisitos específicos

  • para proyectos simples, es totalmente sencillo (ni siquiera necesita un archivo de construcción hasta que tenga dependencias)
  • se usa comúnmente en proyectos de código abierto de Scala. Puede aprender fácilmente sobre la configuración al echar un vistazo a los proyectos de otras personas. Además, muchos proyectos asumen que usted usa sbt y le proporciona instrucciones listas para copiar y pegar para agregarlas como una dependencia de su proyecto.
  • si usa IntelliJ IDEA, puede estar totalmente integrado. Puede hacer que IDEA use sbt para compilar continuamente su proyecto, y viceversa puede usar sbt para generar rápidamente proyectos de IDEA . El último es extremadamente útil si está en un ciclo de ''instantánea'' dependiendo de otras bibliotecas propias que pasen de una versión menor a una menor: simplemente cierre el proyecto, actualice la versión en el archivo de compilación, vuelva a ejecutar el tarea gen-idea , y reabrir el proyecto: actualizaciones realizadas.
  • viene listo con la mayoría de las tareas que necesitará ( compile , test , run , doc , publish-local , console ) - la console es una de las mejores características.
  • Algunas personas destacan la característica de que las dependencias pueden ser repositorios de origen directamente tomados de GitHub. No lo he usado así que no puedo comentar aquí.

Algunas personas odian el sbt porque usa Ivy para la gestión de la dependencia (no puedo comentar sobre sus pros y contras, pero la mayoría de las veces no es un problema), algunas personas odian el sbt porque usted especifica el archivo de compilación en términos de Scala DSL en lugar de XML. Algunas personas se sintieron decepcionadas de que el formato de sbt haya cambiado de v0.7 a v0.10, pero obviamente, la migración no lo afectará si comienza desde cero.