在SBT中,"str" % "str"是什么意思?

14

我发现了这段代码:

import sbt._ 

class AProject(info: ProjectInfo) extends DefaultProject(info) { 
  val scalaToolsSnapshots = ScalaToolsSnapshots
  val scalatest = "org.scalatest" % "scalatest" %
    "1.0.1-for-scala-2.8.0.RC1-SNAPSHOT"
}

我非常困惑scalatest包含什么,以及%具体是干什么的。

2个回答

12

它声明了一个依赖关系。具体来说,

val scalatest = "org.scalatest" % "scalatest" % "1.0.1-for-scala-2.8.0.RC1-SNAPSHOT

指的是一个依赖项,可以在以下网址找到:

http://scala-tools.org/repo-snapshots/org/scalatest/scalatest/1.0.1-for-scala-2.8.0.RC1-SNAPSHOT/

org之前的所有内容都是指存储库,这在其他地方已经(预)定义好了。

虽然不容易找到使%能够用于String的隐式函数,但值得一提的是,它可以在ManagedProject中找到,可以将String转换为GroupID。在同一特征(trait)中,还有另一个隐式函数可以启用at方法。

无论如何,这个隐式函数将把第一个String转换为GroupID,第一个%将获取代表构件ID的String并返回一个GroupArtifactID,而第二个将获取代表修订版本的String并返回一个ModuleID,最终分配给scalatest


实际上,sbt会检查多个服务器以获取软件包,不是吗? - Raphael
默认情况下,是的。我说依赖项“可以在”该路径下找到,而不是它仅会在那里查找。另一方面,在“org”之前的内容将会因每次查找而改变。 - Daniel C. Sobral
2
一个后续问题是,在相同情况下,双百分号 %% 是什么意思。我感觉在这里或其他地方看到过这个问题的答案,但我找不到它 :-( - Ivan

6
如果您使用过Maven,那么这基本上是相同的东西,只不过使用了Scala DSL。%作为分隔符:
<dependency>
      <groupId>org.scalatest</groupId>
      <artifactId>scalatest</artifactId>
      <version>1.0.1-for-scala-2.8.0.RC1-SNAPSHOT</version>      
</dependency>

阅读更多: http://code.google.com/p/simple-build-tool/wiki/LibraryManagement


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