15

现在我不知何故弄乱了我的全局 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 仍然试图找到这两个插件。史诗般的失败。

4

4 回答 4

13

您可以提供 Scala 版本的插件。我没有使用 ~/.sbt/,但我认为它也可以。

以下是我使用 Scala 2.9.2 作为我的项目编译器的项目配置,并使用了一些从 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
)
于 2012-08-02T00:20:27.330 回答
4

一些参考资料:

SBT 插件版本化为它们构建时使用的 scala 版本

你不是唯一的一个...... 再一次,没有答案。

而另一个案例研究,这可能有答案

可能相关的报价?" 记得同时删除 project/plugins 目录,因为如果该目录存在,project/plugins.sbt 将被忽略。"

于 2012-08-01T23:35:22.043 回答
3

您还可以指定sbtVersionscalaVersion。有一个重载addSbtPlugin-

addSbtPlugin(dependency : sbt.ModuleID, sbtVersion : scala.Predef.String, scalaVersion : scala.Predef.String)
于 2018-04-24T03:27:53.393 回答
0

好的,我回到了所有可能导致这种情况的事件。而且因为我发现其他项目仍在构建中,我开始理解这个特定项目的问题B在于,这两个插件似乎是它所依赖的项目的常规依赖A项。

当 sbt 拒绝承认我在 中取消注释的 GPG 插件的存在时~/.sbt/plugins/build.sbt,我将该文件重命名~/.sbt/plugins.sbt,然后再次返回。这个中间位置不知何故意味着插件不再是插件(尽管被添加为),而是当我发布它时addSbtPlugin项目的常规依赖项。A

我试图在所有已知的 Ivy2 缓存目录中找到混乱的A's 。ivy.xml不可能找到 sbt 明显看到的那个。

长话短说:我不得不A人为地修改版本,以摆脱ivy.xml隐藏在某个地方的错误缓存。这迫使 sbt 重新找到A正确的ivy.xml(不再依赖于插件)。

现在我只是担心如果我将全局插件设置到位会发生什么:-#


未来建议:永远不要将任何东西放入~/.sbt/plugins.sbt. 如果您需要 sbt 来了解您的更改~/.sbt/plugins/build.sbt:重新启动计算机。不要碰任何文件。

于 2012-08-01T23:50:12.697 回答