比较sbt和Gradle
我正在潜入Scala并注意到了sbt。 我在java / groovy项目中对Gradle很满意,我知道Gradle有一个scala插件。
在Scala项目中赞成Gradle的原因是什么?
请注意,SBT和Gradle之间的一个关键区别在于它的依赖pipe理 :
- SBT : 常春藤 ,可以修改为固定版本(例如1.5.2)或最新版本(或dynamic版本)。
见“ 常春藤依赖 ”
这意味着“SNAPSHOT”机制支持可能会有问题,即使Mark Harrah在此主题中提供了详细信息:
caching可能会混淆,但常春藤不理解快照是不正确的。 Eugene在另一个线索(也许在pipe理员名单上)解释了这一点。 sbt的自动更新存在一个问题,在0.12中解决。
据我所知,常春藤不支持以Maven的方式发布快照。 我相信我已经在其他地方说过了,但是如果有人想改善这种情况,我认为最好花费在与Gradle团队合作来重用他们的依赖pipe理代码。
- Gradle : 这个post提到( Peter Niederwieser ):
只是为了让你知道,常春藤和Maven快照依赖的问题是Gradle最终用自己的依赖pipe理代码取代常春藤的原因之一。 这是一个很大的任务,但给我们带来了很多好处。
这篇推文提到所有情况都可能在未来发展:
马克在过去说过,他有兴趣使用Gradle而不是常青藤做SBT。
(这两种工具都可以相互学习 )
对我来说SBT的主要特点是:
- 快速编译(比
fsc
快) - 连续编译/testing:命令
~test
将重新编译并testing您每次保存修改项目。 - 交叉编译和交叉发布,跨越几个scala版本。
- 使用正确的scala版本兼容性自动检索依赖关系。
缺点是:
- 倾向于阻止新用户的象形文字语法(特别是如果他们来自Java)
- 没有简单的方法来定义一个“任务”:如果你需要一个特殊的构build过程,你将需要find一个插件,或者自己写一个插件。
sbt是一个Scala DSL,对于它来说Scala是一stream的公民,所以原则上它似乎是一个很好的select。
但是,sbt遭受了版本之间主要的不兼容的变化,这使得很难find正确的工作插件的任务,并得到它的工作。
我个人放弃了,因为它造成了更多的问题,而不是解决问题。 我其实切换到了gradle。
去搞清楚。
我对gradle相当陌生,对于sbt非常新颖 – 到目前为止,我真正喜欢sbt的是交互式控制台。 它允许我使用“检查”等命令来更好地了解发生了什么事情。 AFAIK gradle不提供这样的atm。
Sbt和Gradle,都是基于静态types的语言……但是却没有什么优势:
- 更好的插件支持,特别是autoplugins
- 任务创build和任务之间的依赖关系pipe理
- sbt特别适合scala项目,它支持增量构build,大部分sbt本身是用scala编写的,而sbt构build定义是用scala编写的
- sbt与许多有用的内置任务有内在的shell支持
- sbt的默认生命周期是相当有用的,可以让新手开始与相当less的努力
- Android Studio更新后,Gradle项目刷新失败
- Gradle:为库的特定风格添加依赖
- 谷歌应用引擎的gradleunit testing在哪里期待persistence.xml?
- 当proguard被激活时,Gradle失败
- 在Gradle中,有没有更好的方法来获取环境variables?
- “aapt”IOException错误= 2,没有这样的文件或目录“为什么我不能在jenkins上构build我的gradle?
- Android Studio – 如何ZipAlign apk
- 在Gradle中,我如何在一个地方声明公共依赖关系?
- Android Studio – 没有可debugging的应用程序