是否有某些地方为非Scala程序员提供SBT指南?

时间:2011-07-07 12:24:05

标签: scala operators sbt

有一天,我想学习Scala。我从喜欢它的人那里看到的语言非常令人鼓舞。

但是,今天不是那一天。今天,我只想对我的团队的构建文件进行一些更改。不幸的是,这个构建文件与SBT放在一起,几乎是不可理解的。

我的主要问题是,在我看来,SBT引入了一些庞大的新运算符集合,这些运算符使用字符串和列表来创建某种sbt对象。例如,在sbt:

"args4j" % "args4j" % "2.0.12"

显然是实际定义的;但是,我甚至不知道它在scala repl的类型是什么,因为在repl我得到了明智的错误:

scala> val tstcrap = "args4j" % "args4j" % "2.0.12"
<console>:6: error: value % is not a member of java.lang.String
       val tstcrap = "args4j" % "args4j" % "2.0.12"

即使设置了类路径以包含sbt-launch.jar文件并执行import sbt._,我也会收到此错误。

同样,我正在处理这样的事情:

 val jarSources = (descendents(classesOutput ##, "*") ---
                  assemblyExclude(classesOutput ##))

##运算符是什么,---执行什么,更重要的是这个表达式的类型是什么?所有这些新操作符都记录在某处,是否有某种方法可以使用与sbt构建文件中使用的语言相同的scala repl?

查看此sbt文件会让我想起在没有阅读任何相关手册页的情况下尝试解密perl。 (不是推荐的活动)

更新:在查看下面答案中的链接,并查看标记为sbt的其他问题和答案后,我发现了我的主要scala知识缺失:scala允许定义在解析方法之前调用的隐式转换。在这种情况下,sbtManagedProject特征内定义了从String到私有类sbt.GroupID的隐式转换,因此

"a" % "b"

真的像是

(new GroupID("a")) % "b"

我认为隐式转换的解决顺序和其他规则必须变得非常复杂;它几乎让我想起你可以通过非成员函数在C ++中引入操作符重载的噩梦。

2 个答案:

答案 0 :(得分:5)

由于SBT构建文件是一个成熟的Scala源文件并且依赖于SBT本身提供的一些库,因此很难在不依赖于对Scala的熟悉的情况下很好地覆盖SBT。我不知道这样的指南。

对于您提出的具体问题,我认为这些维基页面会有所帮助:

如果您希望使用SBT库运行Scala REPL,请尝试以下操作:

$ sbt console-project

http://code.google.com/p/simple-build-tool/wiki/RunningSbt列出了一些其他有用的命令。

答案 1 :(得分:1)

2016年更新(5年后) 这不是完整的指南,但Sbt heiroglyphs and multi-projects explained中的文章“Divan Visagie”有助于开始使用sbt

另外,the sbt documentation现在非常完整,涵盖multiple projects in a single build '---' operator is described in the PathFinder(自the 0.2 version起)。