Плюси і мінуси використання sbt vs maven у проекті Scala [закрито]


138

Який інструмент побудови найкращий для Scala? Які плюси і мінуси кожного з них? Як визначити, який із них використовувати в проекті?


5
Я перейшов з Maven в Gradle для проектів Scala, завдяки чудовій підтримці багатомодульних збірок. Досвід Twitter із SBT описується як "сліпучий біль", і вони намагаються відійти від нього (з Мейвен як пробіл у зупинці).
Бен Манес

24
Ще одне круте закрите питання ...
Седрік Х.

14
Стільки хороших запитань я бачу, що щойно закриті; Я не знаю, хто дає владу цим людям довільно вирішити закрити питання чи ні. Я навіть не звертаю уваги на те, близькі вони чи ні.
користувач1888243

2
Погодьтеся. На щастя, у нас є 2 відповіді до закриття цього питання.
Бідно

Відповіді:


83

Ми використовуємо Maven для створення проектів Scala на роботі, оскільки вона добре інтегрується з нашим CI-сервером. Ми, звичайно, можемо просто запустити сценарій оболонки, щоб розпочати збірку, але у нас з Мейвена виходить маса іншої інформації, яку ми хочемо перейти до CI. Ось про єдину причину, про яку я можу думати, щоб використовувати Maven для проекту Scala.

В іншому випадку просто використовуйте SBT. Ви отримуєте доступ до тих самих залежностей (справді найкраща частина про Maven, IMHO). Ви також отримуєте поступовий збірник, який величезний. Можливість запускати оболонку всередині вашого проекту, що також чудово.

ScalaMock працює лише з SBT, і ви, ймовірно, хочете використовувати це, а не насмішку з бібліотеки Java. Крім цього, розширити SBT набагато простіше, оскільки ви можете написати повний код скали у файлі збірки, тому вам не доведеться проходити всі ригамароли написання Mojo.

Коротше кажучи, просто використовуйте SBT, якщо вам справді не потрібна тісна інтеграція у ваш сервер CI


21
Я не погоджуюся ні з одним із вищезазначеного, але просто хотів зазначити, що я перебуваю в процесі написання ScalaMock 3 , однією з головних цілей якого є полегшення підтримки інших систем побудови.
Пол Різник

1
Для повноти варто згадати, що ScalaMock 2 працює чудово з будь-якою системою збирання (це лише jar), доки вам не потрібно використовувати згенеровані макети (тобто до тих пір, поки вам потрібно лише знущатися з рис / інтерфейсів ).
Пол Різник


3
чому вони просто не написали поступовий збірник для Maven? ІМХО, sbt - це архекс-зразок нелікованого синдрому NIH ...
Cpt. Senkfuss

1
Чому виникають проблеми з ІПС через СБТ?
Даніель

21

Питання загрожує просто генеруванням багатьох думок; краще було б мати чіткий перелік вимог або опис свого оточення, попередніх знань тощо.

FWIW, у цій нитці списку розсилки Scala є більше думок .

Мої 2c: йдіть із sbt, якщо у вас немає конкретних вимог

  • для простих проектів це абсолютно непросто (вам навіть не потрібен файл складання, поки у вас не виникнуть залежності)
  • зазвичай використовується у проектах Scala з відкритим кодом. Ви можете легко дізнатися про конфігурацію, заглянувши в чужі проекти. Крім того, багато проектів передбачають, що ви використовуєте sbt, і надаєте готову інструкцію копіювання + вставки для додавання їх як залежність до вашого проекту.
  • якщо ви використовуєте IntelliJ IDEA, він може бути повністю інтегрований. Ви можете мати IDEA використовувати sbt для постійного складання проекту, і навпаки, ви можете використовувати sbt для швидкого генерування проектів IDEA . Останнє надзвичайно корисно, якщо ви перебуваєте у циклі "знімків", залежно від інших власних бібліотек, які стикаються з другорядних до другорядних версій - просто закрийте проект, оновіть версію у файлі збірки, повторіть запуск gen-ideaзавдання та повторно відкрити проект: зроблено оновлення.
  • поставляється готовим з більшістю завдань , які необхідно буде ( compile, test, run, doc, publish-local, console) - У consoleце одна з кращих можливостей.
  • деякі люди підкреслюють особливість того, що залежність може бути джерелами сховищ, безпосередньо захоплених з GitHub. Я цього не використовував, тому не можу тут коментувати.

Деякі люди ненавиджу sbt, оскільки він використовує Ivy для управління залежностями (я не можу коментувати його плюси і мінуси, але більшість випадків це не проблема), деякі люди ненавиджу sbt, оскільки ви визначаєте файл збірки в термінах Scala DSL замість XML. Деякі люди були розчаровані, що формат sbt змінився з v0.7 на v0.10, але очевидно, що міграція не вплине на вас, якщо ви почнете з нуля.


27
Я ненавиджу sbt, оскільки його зловживання символічними операторами та деякі дурні рішення, такі як підтримка форматів .sbt та .scala, але розміщення їх у різних місцях, а висловлювання в .sbt повинні бути розділені принаймні порожнім рядком тощо. Документи sbt вдосконалюються, але недостатньо добре на даний момент. Я найбільше сумую за деякими повноцінними (мінімально складними в реальному світі) .sbt / .scala зразками файлів, що пояснюються по черзі, що охоплюють усі функції sbt. Однак, я використовую sbt щодня, тому що Maven смокче набагато більше.
xiefei

6
Шкода, що це питання було закрито, я впевнений, що існують і фактичні відмінності: наприклад, цей уривок із книги Меннінга про SBT: "Якщо між цілями Мейвена є залежності (скажімо, одна мета створює файл, який інший споживає) тоді ви не можете паралелізувати свою збірку з Maven. З sbt вам потрібно вказати явну залежність між завданнями. Це дозволяє sbt паралельно виконувати завдання BY DEFAULT. Якщо завдання A залежить від B, а C також залежить від B, то sbt запустити завдання B, а потім виконує параметри A і C паралельно. " Сподіваюся, цей коментар допомагає деяким читачам.
jhegedus

19
Я вважав цю тему дуже корисною. Я дуже часто думаю, що модератори Stackoverflow занадто охоче закривають теми. Кому байдуже, якщо вони "поза темою", коли вони дуже часто саме те, що шукають користувачі (і знаходять за допомогою веб-пошуку). Це як би модники Stackoverflow намагаються навмисно відтворити xkcd 979 .
Віль

3
@Ville Мої думки теж. Захист, редагування та закриття стало занадто агресивним.
ankush981

2
Для тих, хто зараз дивиться на це, скарги @ xiefei були адресовані. SBT випав значно більше спеціальних операторів / синтаксису, і висловлювання у файлах / sbt більше не потребують розділення пробілів.
Гроги
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.