specs2 — это не плагин sbt, это библиотека Scala для написания исполняемых спецификаций программного обеспечения.
Существует два уровня проектов sbt. Ваши собственные проекты (назовем их пока «приложениями») и само определение проекта сборки (назовем его «сборка»).
библиотечные зависимости
Когда приложения используют другие библиотеки во время компиляции или тестирования, они называются библиотечными зависимостями (или для краткости "deps"). Эти зависимости объявлены в build.sbt
(или *.sbt
или project/*.scala
) следующим образом:
libraryDependencies += "org.specs2" %% "specs2" % "2.2" % "test"
Говоря %%
, артефакты, опубликованные с использованием sbt, автоматически добавляют постфикс бинарной версии Scala, такой как _2.10
в Maven. Это связано с тем, что (в отличие от Java) не все выпуски Scala бинарно совместимы друг с другом. Scala 2.9.1 и 2.9.2 несовместимы, поэтому они оба имеют разные постфиксы _2.9.1
и _2.9.2
, но все Scala 2.10.x совместимы между сериями, поэтому им присваивается _2.10
.
Однако, к сожалению, для версий Scala требуются разные версии Specs2, возможно, вам придется сделать что-то еще, например:
libraryDependencies <+= scalaVersion({
case "2.9.2" => "org.specs2" %% "specs2" % "1.12.3" % "test"
case x if x startsWith "2.10" => "org.specs2" %% "specs2" % "2.2" % "test"
})
Дополнительные сведения см. в руководстве по началу работы.
sbt-плагины
Существуют специальные типы библиотек, от которых сборка может зависеть для расширения своих возможностей, и они представляют собой плагины sbt. Они объявлены в project/plugins.sbt
(или project/*.sbt
) следующим образом:
addSbtPlugin("com.eed3si9n" % "sbt-buildinfo" % "0.2.5")
Поскольку плагины sbt зависят от версии sbt и версии Scala, которую использует сборка, обе эти информации каким-то образом закодированы в пути опубликованного артефакта. В Ivy они выражаются как имена папок, но в Maven они выражаются в виде постфикса:
person
Eugene Yokota
schedule
09.09.2013
%
вместо%%
: scala-sbt.org/release/docs/Getting-Started/ - person kiritsuku   schedule 24.04.2013