如何为具有交叉构建支持的编译器插件制作sbt插件

时间:2014-04-22 07:32:46

标签: sbt

我有一个sbt-plugin,用于更新scalac选项以添加编译器插件。随着Scala 2.11的发布,我需要根据用户项目中使用的scala版本更改编译器插件的版本。

我知道SBT本身无论如何使用2.10,所以我认为我的sbt-plugin应该只用2.10编译。

但是,我在运行时更改了传递给build的compile-plugin的版本。目前我这样做:

val instrumentSettings: Seq[Setting[_]] = { Seq( libraryDependencies += "group" %% "artifact" % "version % "scope, ) }

这是正确的做法吗?我只有一个sbt-plugin版本(2.10)并且它试图在运行时找到正确的编译器插件版本(2.10或2.11)。

另外sbt-plugin本身使用编译器插件,所以我在build.sbt中将其声明为普通依赖项。在这种情况下,sbt-plugin只会使用2.10版本?

1 个答案:

答案 0 :(得分:1)

我不太清楚实际问题是什么,但我想到了一些想法:

  • sbt插件是构建项目中的依赖库,不会影响您的实际项目代码或类路径。因此,您的sbt 0.13系列插件已发布到Scala 2.10。
  • Scala编译器插件是传递到scalacOptions的jar。 sbt能够通过声明“插件”配置的库依赖性来为您管理。见Compiler Plugin Support

所以这样的事情应该有效:

val instrumentSettings: Seq[Def.Setting[_]] = Seq(
  libraryDependencies += "com.example" %% "foo_plugin" % "0.1.0" % "plugin",
  scalacOptons += ("-Pfoo:base-directory:" + (scalaSource in Compile).value.getAbsolutePath)
)