Pros y contras de usar sbt vs maven en el proyecto Scala [cerrado]
138
¿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 determino cuál de ellos usar en un proyecto?
Pasé de Maven a Gradle para proyectos Scala, debido a su soporte superior para compilaciones de módulos múltiples. Ellos describen la experiencia de Twitter con SBT como un "dolor cegador" y están tratando de alejarse de él (con Maven como un paso intermedio en ese proceso).
Ben Manes
24
Otra pregunta cerrada genial ...
Cedric H.
14
Tantas buenas preguntas que veo que están cerradas; No sé quién le da el poder a estas personas para decidir arbitrariamente cerrar una pregunta o no. Ya ni siquiera le presto atención a si están cerca o no.
user1888243
2
De acuerdo. Afortunadamente tenemos 2 respuestas antes de que esta pregunta se cierre. Pobre para aquellos que votan para cerrar esta pregunta ...
hqt
Respuestas:
83
Estamos utilizando Maven para construir proyectos Scala en el trabajo porque se integra bien con nuestro servidor CI. Podríamos 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 que queremos ingresar a CI. Esa es la única razón por la que puedo pensar en usar Maven para un proyecto Scala.
De lo contrario, solo use 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 genial.
ScalaMock solo funciona con SBT, y es probable que desee usar eso en lugar de una biblioteca de imitación de Java. Además de eso, es mucho más fácil extender SBT ya que puede escribir código de escala completo en el archivo de compilación, por lo que no tiene que pasar por todo el rigor de escribir un Mojo.
En resumen, solo use SBT a menos que realmente necesite una estrecha integración en su servidor CI.
No estoy en desacuerdo con ninguno de los anteriores, pero solo quería señalar que estoy en el proceso de escribir ScalaMock 3 , uno de los objetivos principales es facilitar el soporte de otros sistemas de compilación.
Paul Butcher
1
Solo para completar, vale la pena mencionar que ScalaMock 2 funciona bien con cualquier sistema de compilación (es solo un frasco) siempre que no necesite usar simulacros generados (es decir, siempre que solo necesite simular rasgos / interfaces )
¿Por qué no escribieron una compilación incremental para Maven? En mi humilde opinión, sbt es un ejemplo de un síndrome de NIH no tratado ...
Cpt. Senkfuss
1
¿Por qué problemas con CI debido a SBT?
Daniel
21
La pregunta está en peligro de generar muchas opiniones; Sería mejor tener una lista clara de requisitos o una descripción de su entorno, conocimientos previos, etc.
Mis 2c son: vaya con sbt si no tiene requisitos específicos
para proyectos simples, es totalmente fácil (ni siquiera necesita un archivo de compilació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 suponen que usa sbt y le proporcionan instrucciones de copiar + pegar listas para agregarlas como una dependencia a su proyecto.
Si utiliza IntelliJ IDEA, puede integrarse totalmente. Puede hacer que IDEA use sbt para compilar continuamente su proyecto, y viceversa, puede usar sbt para generar rápidamente proyectos IDEA . Lo último es extremadamente útil si se encuentra en un ciclo de 'instantánea' dependiendo de otras bibliotecas propias que se cambian de una versión secundaria a otra: simplemente cierre el proyecto, actualice la versión en el archivo de compilación, vuelva a ejecutar el gen-ideatarea y vuelva a abrir el proyecto: actualizaciones realizadas.
viene listo con la mayoría de las tareas que se necesitan ( compile, test, run, doc, publish-local, console) - el consolees una de las mejores características.
Algunas personas resaltan la característica de que las dependencias pueden ser repositorios de origen tomados directamente de GitHub. No he usado esto, así que no puedo comentar aquí.
Algunas personas odian a sbt porque usa Ivy para la gestión de dependencias (no puedo comentar sobre sus pros y sus contras, pero la mayoría de las veces no es un problema), algunas personas odian a 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 cambiara de v0.7 a v0.10, pero obviamente, la migración no lo afectará si comienza desde cero.
Odio sbt porque su abuso de operadores simbólicos y algunas decisiones estúpidas, como los formatos de definición .sbt y .scala, pero los colocan en diferentes ubicaciones, y las declaraciones en .sbt deben estar separadas por al menos una línea vacía, etc. Los documentos de sbt están mejorando pero no lo suficientemente bueno en este momento. Lo que más extraño es algunos archivos de muestra .sbt / .scala completos (de mínimos a complejos del mundo real) explicados línea por línea, que cubren todas las características de sbt. Dicho esto, uso sbt diariamente porque Maven apesta mucho más.
xiefei 01 de
66
Lástima que esta pregunta se cerró, estoy seguro de que también hay diferencias de hecho: por ejemplo, este extracto del libro de Manning sobre SBT: "Si hay dependencias entre los objetivos de Maven (digamos que un objetivo produce un archivo que es consumido por otro) entonces no puede paralelizar su compilación con Maven. Con sbt, debe especificar una dependencia explícita entre tareas. Esto permite que sbt ejecute tareas en paralelo POR DEFECTO. Si la tarea A depende de B y C también depende de B, entonces sbt ejecuta la tarea B y luego ejecuta A y C en paralelo ". Espero que este comentario ayude a algunos lectores.
jhegedus
19
Encontré este hilo muy útil. Muy a menudo pienso que los moderadores de Stackoverflow cierran los hilos con demasiado entusiasmo. A quién le importa si están "fuera de tema" cuando a menudo son exactamente lo que los usuarios buscan (y encuentran a través de búsquedas en la web). Es como si los mods de Stackoverflow estuvieran intentando recrear intencionalmente xkcd 979 .
Ville
3
@Ville Mis pensamientos también. El downvoting, la edición y el cierre se han vuelto demasiado agresivos.
ankush981
2
Para cualquiera que esté viendo esto ahora, las quejas de @xiefei han sido atendidas. SBT ha eliminado muchos de los operadores / sintaxis más personalizados, y las declaraciones en los archivos / sbt ya no necesitan separaciones de espacios en blanco.
Respuestas:
Estamos utilizando Maven para construir proyectos Scala en el trabajo porque se integra bien con nuestro servidor CI. Podríamos 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 que queremos ingresar a CI. Esa es la única razón por la que puedo pensar en usar Maven para un proyecto Scala.
De lo contrario, solo use 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 genial.
ScalaMock solo funciona con SBT, y es probable que desee usar eso en lugar de una biblioteca de imitación de Java. Además de eso, es mucho más fácil extender SBT ya que puede escribir código de escala completo en el archivo de compilación, por lo que no tiene que pasar por todo el rigor de escribir un Mojo.
En resumen, solo use SBT a menos que realmente necesite una estrecha integración en su servidor CI.
fuente
La pregunta está en peligro 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 scala .
Mis 2c son: vaya con sbt si no tiene requisitos específicos
gen-idea
tarea y vuelva a abrir el proyecto: actualizaciones realizadas.compile
,test
,run
,doc
,publish-local
,console
) - elconsole
es una de las mejores características.Algunas personas odian a sbt porque usa Ivy para la gestión de dependencias (no puedo comentar sobre sus pros y sus contras, pero la mayoría de las veces no es un problema), algunas personas odian a 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 cambiara de v0.7 a v0.10, pero obviamente, la migración no lo afectará si comienza desde cero.
fuente