比较sbt和Gradle

时间:2012-06-16 08:32:00

标签: scala sbt gradle

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

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

5 个答案:

答案 0 :(得分:59)

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

  • SBTIvy,其修订版本可以作为固定版本(例如1.5.2)或最新版本(或动态版本)提供。
    请参阅“Ivy Dependency
    这意味着“-SNAPSHOT”机制支持可能会出现问题,即使Mark Harrah中有this thread个详细信息:
  

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

     

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

  

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

This tweet提到所有情况都可能在未来发展:

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

(两个工具都可以learn from each other

答案 1 :(得分:52)

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

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

缺点是:

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

答案 2 :(得分:40)

sbt是一个Scala DSL,因为Scala是一流的公民,所以原则上它看起来很合适。

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

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

去图。

答案 3 :(得分:4)

我很擅长学习,而且对于sbt来说还是新手 - 到目前为止我真正喜欢的是交互式控制台。它允许我使用'inspect'之类的命令来更好地了解正在发生的事情。 AFAIK gradle不提供这样的atm。

答案 4 :(得分:-11)

Sbt和gradle,都是基于静态类型的语言....但是sbt没什么优势:

  • 更好的插件支持,特别是autoplugins
  • 任务创建和任务之间的依赖关系管理
  • sbt特别适合scala项目,因为它支持增量构建,大多数sbt本身都是用scala编写的,而sbt构建定义是用scala编写的。
  • sbt具有许多有用的内置任务的interative shell支持
  • sbt默认生命周期非常有用,可以用很少的努力开始新手