2012-07-10 29 views
97

我要走出这个壁橱!我不明白SBT。在那里,我说,现在请帮助我。有人可以解释使用SBT的正确方法吗?

条条大路通罗马,那是SBT一样的:要开始使用SBTSBTSBT LauncherSBT-extras等,然后有不同的方式,包括和决定库。 有没有'最好'的方法?

我在问,因为有时我会有点迷路。 SBT文件非常全面和完整,但我发现自己不知道何时使用build.sbtproject/build.propertiesproject/Build.scalaproject/plugins.sbt

然后它变成乐趣,还有就是Scala-IDESBT - 什么是使用它们在一起的正确方法?首先,鸡还是鸡蛋?

最重要的是,您如何找到正确的存储库和版本以包含在您的项目中?我只是拔出一把马刀,开始黑客前进?我经常发现包括所有东西和厨房水槽的项目,然后我意识到 - 我不是唯一一个迷失的人。

作为一个简单的例子,现在我开始一个全新的项目。我想使用SLICKScala的最新功能,这可能需要最新版本的SBT。 开始的理由是什么?为什么?我应该在什么文件中定义它,它应该如何显示?我知道我可以得到这个工作,但我真的很想要一个专家的意见,应该去哪里(为什么它应该去那里会有奖金)。

我一直在使用SBT进行一年多的小项目。我用SBT,然后SBT Extras(因为它使一些头痛神奇消失),但我不知道为什么我应该使用这一个或另一个。我只是有点沮丧,因为不理解这些东西如何组合在一起(SBT和存储库),并认为如果这可以用人的方式来解释,那么下一个这样做的人会很困难。

+2

究竟你是什么意思与“有斯卡拉-IDE和SBT”?你用sbt定义你的项目并且sbt可以生成一个ide(eclipse或者intellij)项目。所以SBT第一... – Jan 2012-07-10 10:57:09

+2

@Jan我提到,因为Scala-IDE使用SBT作为构建管理器。请参阅http://www.assembla.com/spaces/scala-ide/wiki/SBT-based_build_manager,并在其中提及“无需定义您的SBT项目文件”。我感到困惑。 – Jack 2012-07-10 11:04:55

+0

好的。正如我通常使用intellij(或崇高)编辑scala我不知道。我猜这个构建器会生成自己的sbt配置? – Jan 2012-07-10 12:14:58

回答

28

最重要的是,您如何找到合适的存储库和版本以包含在您的项目中?我只是拔出一把砍刀,并开始黑客前进?我经常发现项目,其中包括家居和厨房的水槽

对于基于Scala的依存关系,我会去什么作者建议。例如:http://code.google.com/p/scalaz/#SBT指示要使用:

libraryDependencies += "org.scalaz" %% "scalaz-core" % "6.0.4" 

或者https://github.com/typesafehub/sbteclipse/对在哪里添加说明:

addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "2.1.0-RC1") 

对于基于Java的依赖,我用http://mvnrepository.com/看到外面的东西,然后点击SBT选项卡。例如http://mvnrepository.com/artifact/net.sf.opencsv/opencsv/2.3指示要使用:

libraryDependencies += "net.sf.opencsv" % "opencsv" % "2.3" 

然后拉出machette和黑客开始用自己的方式前进。如果你幸运的话,最终不会使用依赖于一些相同罐子但是不兼容版本的罐子。鉴于Java生态系统,通常最终会包含所有内容和厨房接收器,并且需要一些努力来消除依赖关系或确保不会错过所需的依赖关系。

作为一个简单的例子,我现在开始一个全新的项目。我想使用SLICK和Scala的最新功能,这可能需要最新版本的SBT。开始的理由是什么?为什么?

我认为理智的观点是build immunity to sbt gradually

确保你明白:

  1. 作用域格式{<build-uri>}<project-id>/config:key(for task-key)
  2. 设置的3个香精(SettingKeyTaskKeyInputKey) - 在http://www.scala-sbt.org/release/docs/Getting-Started/Basic-Def

阅读 “任务键” 一节请始终打开这4页,以便您可以跳转并查找各种定义和示例:

  1. http://www.scala-sbt.org/release/docs/Getting-Started/Basic-Def
  2. http://www.scala-sbt.org/release/docs/Detailed-Topics/index
  3. http://harrah.github.com/xsbt/latest/sxr/Keys.scala.html
  4. http://harrah.github.com/xsbt/latest/sxr/Defaults.scala.html

最大限度地利用的showinspect和标签完成来熟悉的设置,他们的依赖,定义实际值和相关设置。我不相信你会发现使用inspect的关系被记录在任何地方。如果有更好的方法我想知道它。

24

我用SBT的方式是:

  1. 使用sbt-extras - 刚刚拿到shell脚本,并把它添加到你项目
  2. 与建立MyProject.scala文件创建一个项目文件夹的根目录SBT。我比起build.sbt方法更喜欢这种方式 - 它的Scala并且更加灵活
  3. 创建一个project/plugins.sbt文件并为您的IDE添加合适的插件。无论是sbt-eclipse,sbt-idea还是ensime-sbt-cmd,您都可以为eclipse,intellij或ensime生成项目文件。
  4. 启动你的项目的根SBT并生成项目文件的IDE
  5. 利润

我也懒得在IDE的项目文件检查,因为它们是由SBT产生的,但也有可能是你想要这样做的原因。

您可以看到像这样设置的示例​​。

+0

谢谢你的回答。我接受了另一个答案,因为它涵盖了更多的内容,并且推荐了你的原因,这也是非常好的。如果可以的话,我会接受。 – Jack 2012-07-11 11:58:57

1

使用类型安全的激活,称SBT的一个奇特的方式,来与项目模板和种子:https://typesafe.com/activator

Activator new 

Fetching the latest list of templates... 

Browse the list of templates: http://typesafe.com/activator/templates 
Choose from these featured templates or enter a template name: 
1) minimal-java 
2) minimal-scala 
3) play-java 
4) play-scala 
(hit tab to see a list of all templates) 
+4

我偏爱这样的想法,即如果有疑问,为混音添加更多​​魔力不可能解决您的问题。 – Cubic 2014-11-06 15:20:17