сравнивая sbt и Gradle

100

Я погружаюсь в Scala и замечаю sbt. Я был доволен Gradle в проектах java/groovy, и я знаю там плагин Scala для Gradle.

Что может быть веским основанием для поддержки sbt над Gradle в проекте Scala?

  • 0
    SBT в каком-то смысле похож на Vim: если вы ухватитесь за него, вы будете довольны. И, кстати, есть также maven и lein (был создан для clojure, но работает и со scala).
  • 18
    Не испытывайте давления, чтобы перейти к SBT. Некоторые известные члены сообщества Scala используют Gradle. Вместо этого используйте SBT в качестве эксперимента, зная, что вместо этого вы можете использовать Gradle.
Показать ещё 5 комментариев
Теги:
gradle
sbt

5 ответов

59
Лучший ответ

Обратите внимание, что одним ключевым отличием между SBT и Gradle является его управление зависимостями:

  • SBT: Ivy, с aa revision, который может быть задан как фиксированный (например, 1.5.2) или как последний (или динамический). См. "Зависимость Айви "
    Это означает, что поддержка механизма "-SNAPSHOT" может быть проблематичной, хотя Mark Harrah детализирует в этот поток:

Правда, кеш может запутаться, но неправда, что Ivy не понимает разрешения снимков. Евгений объяснил это в другом потоке, возможно, в списке администраторов. Возникла проблема с автоматическим обновлением sbt, которое было адресовано в 0.12.

Что Айви не поддерживает, насколько я знаю, публикует моментальные снимки так, как это делает Maven. Я считаю, что я сказал об этом в другом месте, но если кто-то хочет улучшить ситуацию, я считаю, что лучше всего потратить усилия на работу с командой Gradle, чтобы повторно использовать свой код управления зависимостями.

Просто чтобы вы знали, проблемы с зависимостями моментальных снимков Ivy и Maven были одной из причин, почему Gradle в конечном итоге заменил Ivy собственным кодом управления зависимостями. Это была большая задача, но принесло нам много пользы.

В этом твитте упоминается, что вся ситуация может развиваться в будущем:

Марк сказал в прошлом, что он заинтересован в использовании Gradle вместо Ivy для SBT.

(оба инструмента могут учиться друг у друга)

  • 1
    Самое большое неудобство, с которым я когда-либо сталкивался, это то, что sbt нельзя указывать для правила не перекомпилировать каждый раз, когда оно упоминается. Встроенные правила для Java и Scala имеют эту функцию, но она не доступна для написания пользовательских правил. Поэтому каждый раз, когда вы генерируете программный файл или документацию, и даже если вы генерируете jar-файл, ваша задача будет выполняться при каждом вызове, независимо от того, какие изменения в источниках были фактически выполнены. Даже Марка достаточно умна, но не sbt
  • 1
    @ayvango Это не относится к сегодняшним дням. Есть много плагинов, которые используют эту функцию, например, Android-SDK-плагин
Показать ещё 2 комментария
47

Для меня ключевыми особенностями SBT являются:

  • Быстрая компиляция (быстрее, чем fsc).
  • Непрерывная компиляция/тестирование: команда ~test будет перекомпилировать и протестировать ваш проект каждый раз, когда вы сохраните изменения.
  • Кросс-компиляция и перекрестная публикация в нескольких версиях scala.
  • Автоматическое получение зависимостей с правильной совместимостью версии scala.

Недостатки:

  • Иероглифический синтаксис, который, как правило, препятствует новым пользователям (особенно, если они происходят из Java)
  • Нет простого способа определить "задачу": если вам нужна специальная процедура сборки, вам нужно либо найти плагин, либо написать плагин самостоятельно.
  • 0
    Правильно ли я понимаю, что была / была необходимость в функции кросс-компиляции / публикации из-за проблем, которые были у Scala с обратной двоичной несовместимостью?
  • 1
    Да. И эти проблемы могут повториться при переходе на Scala 2.10.
Показать ещё 5 комментариев
34

sbt является DSL Scala и для него Scala является гражданином первого класса, поэтому в принципе это кажется хорошим подспорьем.

Но sbt страдает от серьезных несовместимых изменений между версиями, что затрудняет поиск правильного рабочего плагина для задачи и заставить его работать.

Я лично отказался от sbt, так как это вызывало больше проблем, чем решение. Я действительно переключился на gradle.

Показать рисунок.

  • 2
    Насколько я знаю, было только одно очень важное изменение: когда sbt переключился с 0.7.x на 0.1.x
  • 1
    Если вы используете плагин для sbt 0.11.2, а затем переходите к sbt 0.12, вам нужно подождать, пока автор плагина скомпилирует новую версию или сделает это самостоятельно. idea-sbt - один из примеров.
Показать ещё 7 комментариев
3

Я новичок в gradle и очень новичок в sbt - что мне действительно нравится в sbt до сих пор - это интерактивная консоль. Это позволяет мне использовать команды, такие как "проверка", чтобы лучше понять, что происходит. AFAIK gradle не предоставляет что-то вроде этого atm.

-7

Sbt и gradle, оба основаны на статически типизированных языках.... но sbt имеет несколько преимуществ:

  • поддержка плагинов, особенно autoplugins
  • создание задачи и управление зависимостями между задачами
  • sbt специально подходит для проектов scala в том смысле, что он поддерживает инкрементные сборки, и большая часть самого sbt написана в scala, а определения сборки sbt написаны в scala
  • sbt поддерживает поддержку командной оболочки со многими полезными встроенными задачами
  • Жизненный цикл sbt по умолчанию очень полезен и может начать начинать с меньшего усилия.
  • 0
    Gradle основан на Groovy, который не является статически типизированным языком.
  • 0
    Gradle управляет зависимостями между задачами, создать задачу как можно проще, я понятия не имею, как проще написать плагин, чем для gradle, который может использовать Groovy, Java, плагины gradle и, возможно, больше.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню