什么是Scala的百分号(%)运算符和字符串中的at方法?

19
val scalaToolsSnapshots = "Scala-Tools Maven2 Snapshots Repository" at "http://scala-tools.org/repo-snapshots"
val specs = "org.scala-tools.testing" % "specs_2.9.0-1" % "1.6.8" % "test"

这是什么意思?


1
可能是什么是 SBT 中的 str%str?的重复问题。 - Daniel C. Sobral
3个回答

18
这是一个定义项目的管理依赖关系的sbt(简单构建工具)DSL。
格式与maven非常相似:第一行指定了仓库的位置,第二行定义了依赖关系,例如"groupId" % "artifactId" % "version" % "scope"
详细信息请参阅sbt wiki页面Managed Dependencies部分)。

感谢提供sbt维基页面的链接。我在入门指南中没有看到这个。 - MetaChrome
帮助我理解这里正在发生什么的关键词是DSL。我一直在寻找Scala本身中的字符串运算符,直到我偶然发现了这里。上面链接的sbt wiki描述了的作用在此处。具体来说,“方法从字符串创建ModuleID对象,然后将这些ModuleID添加到libraryDependencies中。” - kdbanman

17

你也可以使用以下方式简化这个声明:

scalaVersion := "2.9.0-1"

scalaToolsSnapshots := "Scala-Tools Maven2 Snapshots Repository" at "http://scala-tools.org/repo-snapshots"

specs := "org.scala-tools.testing" %% "specs" % "1.6.8" % "test"

%% 将指定使用与项目 Scala 版本二进制兼容的 specs 版本。

如果您计划升级 Scala 版本或打算针对多个 Scala 版本发布库,则应考虑使用它。

在底层,首先将字符串隐式转换为 GroupID,使用 %% 方法将下一个字符串转换为 GroupArtifactId,接下来的 % 创建一个 ModuleID,最后的 % 添加一个范围到 ModuleID


2

这确实是sbt(简单构建工具)。

'at'方法定义在字符串上并返回一个Resolver。 '%'方法定义在字符串上并返回一个ModuleID。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接