Добавление плагина SBT, в URL-адресе которого не указана версия SBT.

Specs2 не определяет версию SBT в своем URL-адресе: https://oss.sonatype.org/content/repositories/releases/org/specs2/specs2_2.9.2/1.12.3/

Это вызывает проблемы для SBT при попытке решить эту проблему...

[warn] ==== sonatype-snapshots: tried
[warn]   https://oss.sonatype.org/content/repositories/snapshots/org/specs2/specs2_2.9.2_0.12/1.12.3/specs2-1.12.3.pom
[warn] ==== sonatype-releases: tried
[warn]   https://oss.sonatype.org/content/repositories/releases/org/specs2/specs2_2.9.2_0.12/1.12.3/specs2-1.12.3.pom

Как заставить SBT разрешать правильный URL-адрес?


person Lawrence Wagerfield    schedule 24.04.2013    source источник
comment
Используйте % вместо %%: scala-sbt.org/release/docs/Getting-Started/   -  person kiritsuku    schedule 24.04.2013
comment
Это добавляет версию scala, а не версию SBT. Скала-версия в порядке.   -  person Lawrence Wagerfield    schedule 24.04.2013


Ответы (1)


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