Как сообщить SBT о потреблении конкретной версии scala для плагинов?
Теперь я как-то испортил свои глобальные плагины sbt (~/.sbt/plugins/build.sbt
). Они всегда были отлично извлечены против Scala 2.9.1, который, похоже, является версией, которую хочет получить sbt 0.11.3, и все плагины (sbt-gpg-plugin, sbt-idea-plugin) публикуются против 2.9.1.
Теперь, что бы я ни делал, он настойчиво пытается найти их построенными против 2.9.2:
[warn] Note: Some unresolved dependencies have extra attributes. Check that these dependencies exist with the requested attributes.
[warn] com.github.mpeltonen:sbt-idea:1.0.0 (sbtVersion=0.11.3, scalaVersion=2.9.2)
[warn] com.jsuereth:xsbt-gpg-plugin:0.6 (sbtVersion=0.11.3, scalaVersion=2.9.2)
...
[error] {file:...}default-50be6e/*:update: sbt.ResolveException: unresolved dependency: com.github.mpeltonen#sbt-idea;1.0.0: not found
Как я могу это исправить, поэтому sbt извлекает плагины для Scala 2.9.1, как и раньше?
Для полноты, мои файлы смотрят после предложений:
// project-home/build.sbt
scalaVersion := "2.9.2"
...
// project-home/project/plugins.sbt
resolvers += "less is" at "http://repo.lessis.me"
addSbtPlugin( "me.lessis" % "ls-sbt" % "0.1.1" )
scalaVersion := "2.9.1" // "just in case it helps"
// ~/.sbt/plugins/build.sbt
scalaVersion := "2.9.1" // "just in case it helps"
resolvers += "sbt-idea-repo" at "http://mpeltonen.github.com/maven/"
resolvers += Resolver.url( "sbt-plugin-releases", url( "http://scalasbt.artifactoryonline.com/scalasbt/sbt-plugin-releases" ))( Resolver.ivyStylePatterns )
addSbtPlugin("com.github.mpeltonen" % "sbt-idea" % "1.0.0")
addSbtPlugin( "com.jsuereth" % "xsbt-gpg-plugin" % "0.6" )
Что еще хуже, проблема сохраняется, даже после того, как я удалил ~/.sbt/plugins/build.sbt
. Таким образом, больше нет ссылок (по крайней мере, видимых на меня) ни на sbt-idea, ни на xsbt-gpg-plugin. Тем не менее я больше не могу скомпилировать какой-либо проект, потому что sbt все еще пытается найти эти два плагина. Эпический провал.
Ответы
Ответ 1
Вы можете предоставить версию плагина Scala. Я не использовал ~/.sbt/, но я думаю, что он тоже будет работать.
Ниже приведена конфигурация моего проекта с использованием Scala 2.9.2 в качестве моего компилятора проекта и использование некоторого pluign, которые скомпилированы из Scala 2.9.1. Поскольку Scala 2.9.1 и Scala 2.9.2 совместимы с двоичными файлами, я пока не сталкиваюсь с какой-либо проблемой.
// MyProject/build.sbt
name := "MyProject"
version := "0.1"
scalaVersion := "2.9.2"
Ниже приведена конфигурация плагина:
// File: MyProject/project/plugins.sbt
import sbt._
import Defaults._
resolvers += Resolver.url("sbt-plugin-releases",
new URL("http://scalasbt.artifactoryonline.com/scalasbt/sbt-plugin-releases/"))(
Resolver.ivyStylePatterns)
// Resolved to:
//
// http://..../com.untyped/sbt-less/scala_2.9.1/sbt_0.11.3/0.4/jars/sbt-less.jar
//
libraryDependencies += sbtPluginExtra(
m = "com.untyped" % "sbt-less" % "0.4", // Plugin module name and version
sbtV = "0.11.3", // SBT version
scalaV = "2.9.1" // Scala version compiled the plugin
)
Ответ 2
Некоторые ссылки:
Плагины SBT версируются в версию scala, с которой они были построены с.
Ты не единственный... Опять нет ответов.
И еще одно тематическое исследование может иметь ответы.
Возможно, релевантная цитата? "Не забудьте также удалить каталог /plugins -directory, потому что, если каталог существует, project/plugins.sbt игнорируется".
Ответ 3
Хорошо, я вернулся ко всем событиям, которые могли бы привести к этому. И поскольку я обнаружил, что другие проекты все еще строятся, я начал понимать, что проблема с этим конкретным проектом B
заключалась в том, что оказалось, что два плагина были регулярными зависимостями проекта A
, от которых он зависел.
Когда sbt отказался признать наличие плагина GPG, который я раскоментировал в ~/.sbt/plugins/build.sbt
, я переименовал этот файл в ~/.sbt/plugins.sbt
и обратно. Эта промежуточная позиция каким-то образом означала, что плагины больше не являются плагинами (несмотря на то, что они добавлены как addSbtPlugin
), но регулярные зависимости для проекта A
, когда я публикую это.
Я попытался найти, что перепутал A
ivy.xml
во всех известных каталогах кеша Ivy2. Невозможно было найти тот, который, очевидно, видел sbt.
Длинный рассказ, короткий ответ: мне пришлось искусственно использовать версию A
, чтобы избавиться от неправильного ivy.xml
кэшированного где-то в скрытом месте. Это вынудило sbt повторно найти A
с правильным ivy.xml
(больше не зависящим от плагинов).
Теперь я просто волнуюсь, что произойдет, если я установлю свои глобальные настройки плагина: - #
Будущее советует: Никогда не помещайте ничего в ~/.sbt/plugins.sbt
. Если вам нужно sbt, чтобы понять, что вы изменили ~/.sbt/plugins/build.sbt
: перезагрузите компьютер. Не трогайте файлы.