Что означает "str" % "str" в SBT?
Я натолкнулся на этот код:
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
, и что делает %
.
Ответы
Ответ 1
Если вы использовали 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
Ответ 2
Он объявляет зависимость. В частности,
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
, преобразуя a String
в GroupID
. В том же признаке есть еще один неявный, который позволяет использовать метод at
.
Во всяком случае, неявный превратит первый String
в GroupID
, первый %
возьмет String
, представляющий идентификатор артефакта, и вернет a GroupArtifactID
, а второй возьмет String
, представляющий ревизию, и возвращает a ModuleID
, что, наконец, присваивается scalatest
.