Как сообщить 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: перезагрузите компьютер. Не трогайте файлы.