сравнение sbt и Gradle [закрыто]
я ныряю в Scala и заметил sbt. Я был очень доволен Gradle в Java / groovy проектах, и я знаю, что есть плагин scala для Gradle.
какие могут быть веские причины для предпочтения sbt над Gradle в проекте Scala?
5 ответов
обратите внимание, что одним из ключевых различий между SBT и Gradle является его управление зависимостями:
-
SBT: Айви, с ревизией, которая может быть задана как фиксированная (например, 1.5.2) или как последняя (или динамическая).
См."Зависимость От Плюща"
Это означает, что поддержка механизма "- SNAPSHOT " может быть проблематичной, даже если Марк Харра детали этот нить:
Это правда, что кэш может запутаться, но это не правда, что Айви не понимает разрешения снимков. Евгений объяснил этот момент в другой теме, возможно, в списке администраторов. Существует проблема с автоматическим обновлением sbt, которая была решена в 0.12.
то, что Айви не поддерживает, насколько я знаю, публикует снимки так, как это делает Maven. Я считаю, что я заявил об этом в другом месте, но если кто-то хочет улучшить ситуация, на мой взгляд, лучше всего потратить усилия на работу с командой Gradle для повторного использования их кода управления зависимостями.
- ш : этой теме упоминает (Питер Niederwieser):
просто чтобы вы знали, проблемы с зависимостями моментальных снимков Ivy и Maven были одной из причин, почему Gradle в конечном итоге заменил Ivy собственным кодом управления зависимостями. Это была большая задача, но принес нам много добра.
этот твит упоминает, что вся ситуация может развиваться в будущем:
Марк сказал в прошлом, что он заинтересован в использовании Gradle вместо Ivy для SBT.
(оба инструмента могут учиться друг у друга)
для меня ключевыми особенностями SBT являются:
- быстрая компиляция (быстрее, чем
fsc
). - непрерывная компиляция / тестирование: команда
~test
будет перекомпилировать и протестировать ваш проект каждый раз, когда вы сохраняете изменения. - кросс-компиляция и кросс-публикация в нескольких версиях scala.
- автоматическое получение зависимостей с правильной совместимостью версий scala.
минусов являются:
- иероглифический синтаксис, который имеет тенденцию препятствовать новым пользователям (особенно, если они происходят из Java)
- нет простого способа определить "задачу": если вам нужна специальная процедура сборки, вам нужно будет найти плагин, или написать плагин самому.
sbt является Scala DSL, и для него Scala является гражданином первого класса,поэтому в принципе это кажется хорошим.
но sbt страдает от серьезных несовместимых изменений между версиями, что затрудняет поиск правильного рабочего плагина для задачи и его работу.
Я лично отказался от sbt, так как он вызывал больше проблем, чем решал. Я на самом деле перешли для Gradle.
идите на фиг.
Я довольно новичок в gradle и очень новичок в sbt - что мне действительно нравится в sbt, так это интерактивная консоль. Это позволяет мне использовать команды типа "inspect", чтобы лучше понять, что происходит. AFAIK gradle не предоставляет что-то вроде этого atm.
Sbt и gradle, оба основаны на статически типизированных языках....но SBT имеет несколько преимуществ:
- лучшая поддержка плагинов, особенно autoplugins
- создание задач и управление зависимостями между задачами
- sbt специально подходит для проектов scala в том смысле, что он поддерживает инкрементные сборки, и большая часть самого sbt написана в Scala, а определения сборки sbt написаны в scala
- sbt имеет интерактивную поддержку оболочки со многими полезные встроенные задачи
- жизненный цикл sbt по умолчанию довольно полезен и может начать новичок с довольно меньшими усилиями