如何通知SBT使用插件的特定scala版本?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何通知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仍然试图找到这两个插件。史诗失败。
您可以提供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
)
一些参考:
SBT plugins are versioned to the scala version they were built with。
You're not the only one...再一次,没有答案。
And another case study, this may have answers。
一个可能相关的报价? “还记得删除项目/插件 - 目录,因为如果目录存在,则忽略project / plugins.sbt。”
好的,我回到了可能导致这一切的所有事件。因为我发现其他项目仍在构建,我开始明白这个特殊项目B
的问题在于它看起来两个插件是项目A
的常规依赖项,它依赖于它。
当sbt拒绝承认我在~/.sbt/plugins/build.sbt
中取消注释的GPG插件的存在时,我将该文件重命名为~/.sbt/plugins.sbt
,然后再返回。那个中间位置不知何故意味着插件不再是插件(尽管被添加为addSbtPlugin
),但是当我发布时,项目A
的常规依赖。
我试图在所有已知的Ivy2缓存目录中找到混乱的A
的ivy.xml
。找不到sbt明显看到的那个是不可能的。
简短的回答:简短的回答:我不得不人为地碰撞A
的版本,以摆脱在隐藏的地方缓存的错误的ivy.xml
。这迫使sbt用正确的A
重新找到ivy.xml
(不再依赖于插件)。
现在我只是担心如果我将全局插件设置到位会发生什么: - #
未来建议:永远不要把任何东西放到~/.sbt/plugins.sbt
。如果您需要知道您更改了~/.sbt/plugins/build.sbt
:重新启动计算机。请勿触摸任何文件。
您还可以指定sbtVersion
和scalaVersion
。有一个超载的addSbtPlugin
-
addSbtPlugin(dependency : sbt.ModuleID, sbtVersion : scala.Predef.String, scalaVersion : scala.Predef.String)
以上是关于如何通知SBT使用插件的特定scala版本?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 SBT Jenkins 插件运行特定测试以进行 ScalaTest 测试