web-dev-qa-db-fra.com

Avantages et inconvénients de l’utilisation de sbt vs maven dans Scala project

Quel outil de construction est le meilleur pour Scala? Quels sont les avantages et les inconvénients de chacun d'eux? Comment déterminer lequel d'entre eux doit être utilisé dans un projet?

137

Nous utilisons Maven pour construire des projets Scala au travail car ils s’intègrent bien avec notre serveur CI. Nous pourrions simplement exécuter un script Shell pour lancer une construction, bien sûr, mais nous avons une foule d’autres informations provenant de Maven que nous souhaitons intégrer à CI. C’est à peu près la seule raison pour laquelle je peux penser à utiliser Maven pour un projet Scala.

Sinon, utilisez simplement SBT. Vous avez accès aux mêmes dépendances (la meilleure partie de maven, à mon humble avis). Vous obtenez également la compilation incrémentale, qui est énorme. La possibilité de démarrer un shell dans le cadre de votre projet est également excellente.

ScalaMock ne fonctionne qu'avec SBT, et vous allez probablement vouloir l'utiliser plutôt qu'une bibliothèque moqueuse Java. En plus, c'est beaucoup plus facile à étendre SBT puisque vous pouvez écrire le code complet scala dans le fichier de construction, vous n’aurez donc pas à passer par tout le rigamarole de l’écriture d’un Mojo.

En bref, utilisez simplement SBT sauf si vous avez vraiment besoin d’une intégration étroite dans votre serveur CI.

82
mblinn

La question risque de générer beaucoup d'opinions. il serait préférable d'avoir une liste claire des exigences ou une description de votre environnement, de vos connaissances antérieures, etc.

FWIW, il y a plus d'opinions dans ce sujet de la liste de diffusion scala .

Mes 2c sont: Allez avec sbt si vous n'avez pas d'exigences spécifiques

  • pour des projets simples, cela ne nécessite aucun effort (vous n'avez même pas besoin d'un fichier de construction avant d'avoir des dépendances)
  • il est couramment utilisé dans Scala projets open source. Vous pouvez facilement en apprendre davantage sur la configuration en jetant un coup d'œil dans les projets d'autres personnes. De plus, de nombreux projets supposent que vous utilisez sbt et vous fournissent une instruction prête à l'emploi copier/coller pour les ajouter en tant que dépendance à votre projet.
  • si vous utilisez IntelliJ IDEA, il peut être totalement intégré. Vous pouvez demander à IDEA d'utiliser sbt pour compiler en continu votre projet, et inversement, vous pouvez utiliser sbt pour générer rapidement IDEA. projets . La dernière est extrêmement utile si vous êtes dans un cycle 'instantané' avec dépendant d'autres bibliothèques de votre propre bibliothèque qui passent de version mineure à version mineure - fermez simplement le projet, mettez à jour la version dans le fichier de construction, exécutez à nouveau le gen-idea, Puis rouvrez le projet: mises à jour effectuées.
  • est prêt avec la plupart des tâches dont vous aurez besoin (compile, test, run, doc, publish-local, console ) - le console est l’une des meilleures fonctionnalités.
  • certaines personnes soulignent que les dépendances peuvent être des référentiels sources directement saisis dans GitHub. Je ne l'ai pas utilisé alors je ne peux pas commenter ici.

Certaines personnes détestent sbt parce qu’elle utilise Ivy pour la gestion de la dépendance (je ne peux pas en dire plus sur ses avantages et ses inconvénients, mais la plupart du temps, il s’agit d’un non-problème), certaines personnes détestent sbt parce que vous spécifiez le fichier de construction en tant que Scala DSL au lieu de XML. Certaines personnes ont été déçues que le format de sbt soit passé de v0.7 à v0.10, mais il est évident que la migration ne vous affectera pas si vous partez de zéro.

21
0__