2014-04-22 98 views
1

我有一個sbt-plugin,用於更新scalac選項以添加編譯器插件。隨着Scala 2.11的發佈,我需要根據用戶項目中使用的scala版本來更改編譯器插件的版本。如何爲跨編譯支持的編譯器插件製作sbt插件

據我所知,SBT本身使用2.10,所以我認爲我的sbt-plugin只能編譯爲2.10。

但是,我更改了在運行時傳遞給構建的編譯插件的版本。目前,我這樣做:

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

我不太清楚什麼實際的問題是,但這裏是來找我的腦海裏的一些想法:

  • SBT插件是您的構建項目,這會不會影響你的實際項目依賴庫代碼或類路徑。所以你的sbt 0.13系列插件發佈到Scala 2.10。
  • Scala編譯器插件是傳遞到scalacOptions的罐子。 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) 
) 
+1

我想'scalaSource在Compile'就是我一直在尋找。我只需要一個sbt-plugin(因爲sbt只有2.10),然後我使用上面的來改變編譯器插件的版本。如果您對我在一小時前發佈的感興趣,請查看sbt-scoverage 0.98.4。 – monkjack