Plusy i minusy używania sbt vs maven w projekcie Scala [zamknięte]

138

Które narzędzie do kompilacji jest najlepsze dla Scali? Jakie są wady i zalety każdego z nich? Jak określić, którego z nich użyć w projekcie?

Konstantin Solomatov
źródło
5
Przeszedłem z Maven na Gradle w projektach Scala ze względu na doskonałe wsparcie dla kompilacji wielomodułowych. Doświadczenie Twittera z SBT jest przez nich opisywane jako „oślepiający ból” i próbują od niego odejść (z Mavenem jako przerwą w tym procesie).
Ben Manes
24
Kolejne fajne zamknięte pytanie ...
Cedric H.
14
Widzę, że tak wiele dobrych pytań jest po prostu zamkniętych; Nie wiem, kto daje tym ludziom moc arbitralnego decydowania o zamknięciu pytania, czy nie. Nawet nie zwracam uwagi na to, czy są blisko, czy już nie.
user1888243
2
Zgodzić się. Na szczęście mamy 2 odpowiedzi, zanim to pytanie zostanie zamknięte. Słabe dla tych, którzy
głosują

Odpowiedzi:

83

Używamy Maven do tworzenia projektów Scala w pracy, ponieważ dobrze integruje się z naszym serwerem CI. Moglibyśmy oczywiście uruchomić skrypt powłoki, aby rozpocząć kompilację, ale z Mavena pochodzi kilka innych informacji, które chcemy wprowadzić do CI. To chyba jedyny powód, dla którego przychodzi mi do głowy użycie Mavena w projekcie Scala.

W przeciwnym razie po prostu użyj SBT. Otrzymujesz dostęp do tych samych zależności (naprawdę najlepsza część o maven, IMHO). Dostajesz także kompilację przyrostową, która jest ogromna. Możliwość uruchomienia powłoki wewnątrz projektu, co również jest świetne.

ScalaMock działa tylko z SBT i prawdopodobnie będziesz chciał użyć tego zamiast biblioteki do mockowania Java. Co więcej, znacznie łatwiej jest rozszerzyć SBT, ponieważ możesz napisać pełny kod scala w pliku kompilacji, więc nie musisz przechodzić przez wszystkie rygory związane z pisaniem Mojo.

Krótko mówiąc, po prostu użyj SBT, chyba że naprawdę potrzebujesz ścisłej integracji z serwerem CI.

mblinn
źródło
21
Nie zgadzam się z żadnym z powyższych, ale chciałem tylko zaznaczyć, że jestem w trakcie pisania ScalaMock 3 , którego jednym z głównych celów jest ułatwienie obsługi innych systemów kompilacji.
Paul Butcher
1
Dla kompletności warto wspomnieć, że ScalaMock 2 działa dobrze z każdym systemem kompilacji (to tylko słoik), o ile nie musisz używać wygenerowanych makiet (tj. O ile potrzebujesz tylko mockować cechy / interfejsy ).
Paul Butcher
3
dlaczego po prostu nie napisali przyrostowej kompilacji dla mavena? IMHO, sbt to archeprzykład nieleczonego zespołu NIH ...
Kpt. Senkfuss
1
Dlaczego problemy z CI z powodu SBT?
Daniel,
21

Zagraża temu po prostu wygenerowanie wielu opinii; lepiej byłoby mieć jasną listę wymagań lub opis środowiska, wcześniejszą wiedzę itp.

FWIW, w tym wątku na liście dyskusyjnej scala jest więcej opinii .

Moje 2c to: Idź z kimś, jeśli nie masz określonych wymagań

  • w przypadku prostych projektów jest to całkowicie bezproblemowe (nie potrzebujesz nawet pliku kompilacji, dopóki nie masz zależności)
  • jest powszechnie używany w projektach Open Source firmy Scala. Możesz łatwo dowiedzieć się o konfiguracji, zaglądając do projektów innych osób. Ponadto wiele projektów zakłada, że ​​używasz sbt i zapewnia gotową instrukcję kopiuj + wklej, aby dodać je jako zależność do projektu.
  • jeśli używasz IntelliJ IDEA, można go całkowicie zintegrować. Możesz mieć IDEA używającą sbt do ciągłego kompilowania projektu i odwrotnie, możesz użyć sbt do szybkiego generowania projektów IDEA . Ta ostatnia jest niezwykle przydatna, jeśli jesteś w cyklu `` migawki '' z zależnością od innych własnych bibliotek, które przechodzą z wersji pomocniczej do wersji pomocniczej - po prostu zamknij projekt, zaktualizuj wersję w pliku kompilacji, ponownie uruchom gen-ideazadanie i ponownie otwórz projekt: aktualizacje wykonane.
  • jest gotowy z większości zadań będą potrzebne ( compile, test, run, doc, publish-local, console) - w consolejest jednym z najlepszych cech.
  • niektórzy podkreślają funkcję polegającą na tym, że zależności mogą być repozytoriami źródłowymi bezpośrednio pobranymi z GitHub. Nie używałem tego, więc nie mogę tutaj komentować.

Niektórzy nienawidzą sbt, ponieważ używa Ivy do zarządzania zależnościami (nie mogę komentować jego zalet i wad, ale w większości przypadków nie jest to problem), niektórzy nienawidzą sbt, ponieważ określasz plik kompilacji w kategoriach Scala DSL zamiast XML. Niektórzy byli rozczarowani zmianą formatu sbt z v0.7 na v0.10, ale oczywiście migracja nie wpłynie na ciebie, jeśli zaczniesz od zera.

0__
źródło
27
Nienawidzę sbt, ponieważ nadużywa operatorów symbolicznych i niektóre głupie decyzje, takie jak obsługa formatów definicji .sbt i .scala, ale umieszczam je w różnych lokalizacjach, a instrukcje w .sbt muszą być oddzielone przynajmniej pustą linią itp. Dokumenty of sbt poprawiają się, ale w tej chwili nie są wystarczająco dobre. Najbardziej brakuje mi kompletnych (od minimalnych do rzeczywistych złożonych) przykładowych plików .sbt / .scala, objaśnionych wiersz po wierszu, obejmujących wszystkie funkcje sbt. To powiedziawszy, używam sbt codziennie, ponieważ Maven jest do bani znacznie bardziej.
xiefei
6
Szkoda, że ​​to pytanie zostało zamknięte, jestem pewien, że istnieją również faktyczne różnice: na przykład ten fragment książki Manninga o SBT: „Jeśli istnieją zależności między celami Maven (powiedzmy, że jeden cel tworzy plik, który jest konsumowany przez inny) wtedy nie możesz zrównoleglenie kompilacji z Mavenem. W przypadku sbt musisz określić wyraźną zależność między zadaniami. Umożliwia to sbt równoległe uruchamianie zadań WG DOMYŚLNIE. Jeśli zadanie A zależy od B, a C również zależy od B, to sbt uruchom zadanie B, a następnie uruchomi A i C równolegle. " Mam nadzieję, że ten komentarz pomoże niektórym czytelnikom.
jhegedus
19
Uważam, że ten wątek jest bardzo przydatny. Bardzo często myślę, że moderatorzy Stackoverflow zbyt chętnie zamykają wątki. Kogo obchodzi, czy są „poza tematem”, kiedy bardzo często są dokładnie tym, czego szukają użytkownicy (i znajdują się w wyszukiwarce internetowej). To tak, jakby mody Stackoverflow próbowały celowo odtworzyć xkcd 979 .
Ville,
3
@Ville Moje myśli. Głosowanie w dół, edycja i zamykanie stały się zbyt agresywne.
ankush981
2
Dla każdego, kto patrzy na to teraz, skargi @ xiefei zostały rozwiązane. SBT porzucił wiele niestandardowych operatorów / składni, a instrukcje w plikach / sbt nie wymagają już separacji białych znaków.
Grogs