比较sbt和Gradle

Han*_*eek 109 scala gradle sbt

我潜入斯卡拉并注意到了sbt.我对Java/groovy项目中的Gradle非常满意,我知道Gradle有一个scala插件.

在Scala项目中,有什么理由支持Gradle而不是Gradle?

Von*_*onC 60

请注意,SBT和Gradle之间的一个关键区别是它的依赖关系管理:

确实缓存可能会混淆,但是Ivy不理解解析快照是不正确的.Eugene在另一个帖子中解释了这一点,也许在管理员列表中.sbt的自动更新存在问题,已在0.12中解决.

据我所知,Ivy不支持以Maven的方式发布快照.我相信我已在其他地方说过这一点,但如果有人想要改善这种情况,我的意见是最好花费在Gradle团队上重用他们的依赖管理代码.

只是为了让您知道,Ivy和Maven快照依赖项的问题是Gradle最终用自己的依赖管理代码取代Ivy的原因之一.这是一项艰巨的任务,但给我们带来了很多好处.

这条推文提到所有情况都可能在未来发展:

Mark过去曾表示,他有兴趣使用Gradle代替Ivy进行SBT.

(两个工具可以相互学习)


par*_*tic 53

对我来说,SBT的主要特点是:

  • 快速编译(快于fsc).
  • 连续编译/测试:~test每次保存修改时,该命令都将重新编译并测试项目.
  • 跨几个scala版本的交叉编译和交叉发布.
  • 使用正确的scala版本兼容性自动检索依赖项.

缺点是:

  • 一种象形文字的语法,往往会阻止新用户(特别是如果他们来自Java)
  • 没有简单的方法来定义"任务":如果你需要一个特殊的构建过程,你需要找到一个插件,或者自己编写一个插件.

  • 'hieroglyphic syntax'缺点为+1.这是我对SBT最大的抱怨.操作员超载总是导致滥用: - / (25认同)
  • 神秘的SBT语法带来了最糟糕的scala.Gradle基于经过深思熟虑的域模型和直接语法. (7认同)

Jen*_*der 40

sbt是一个Scala DSL,因为Scala是一流的公民,所以原则上它似乎是一个很好的选择.

但是sbt遭受了版本之间的主要不兼容的更改,这使得很难为任务找到正确的工作插件并使其工作.

我个人放弃了sbt,因为它造成的问题多于解决的问题.我实际上切换到了gradle.

去搞清楚.

  • @fmpwizard sbt 0.12行尚未发布...停止传播FUD. (4认同)
  • 这不是我们不可能使用的,我们的团队使用它.但我的评论是支持这个答案,其中说"......但是版本之间存在重大不兼容的变化,这使得很难为任务找到正确的工作插件并使其工作......"就像你注意到的那样,我不能只使用scct插件,我不得不修改它(是的小改变,但后来我不得不将它发布到某个地方,所以我的整个团队都可以访问它)痛苦无缘无故. (3认同)
  • 您是否可以使用gradle对不同的Scala版本进行交叉编译? (3认同)
  • 据我所知,目前只有一个非常重大的变化:当sbt从0.7.x切换到0.1.x时 (2认同)

eug*_*evd 5

我对 gradle 还很陌生,对 sbt 也很陌生——到目前为止,我真正喜欢 sbt 的是交互式控制台。它允许我使用像“检查”这样的命令来更好地了解正在发生的事情。AFAIK gradle 不提供类似这种 atm 的东西。