如何获取插件中元项目的scalacOptions值?

时间:2015-09-02 12:31:29

标签: sbt

ensime-sbt插件中,我们需要能够获得sbt进程用于编译构建定义的编译器标志(即project下的所有内容)。

我们有State对象,但是我看不到任何获取编译器标志的方法,它们在哪里?

注意:这是项目本身的编译标志,我的意思是仅用于构建定义。

e.g。说项目在project/plugins.sbt

中有这个
scalacOptions += "-Xfuture"

我们如何从插件中读取它?

这与How to share version values between project/plugins.sbt and project/Build.scala?

有些关联

1 个答案:

答案 0 :(得分:1)

您可以为项目生成构建文件。而且,要做到这一点,您必须在元项目和元项目的元项目中添加插件。

import sbt._
import Keys._

object MyPlugin extends AutoPlugin {

  object autoImport {
    val scalacOptions4Meta = SettingKey[Seq[String]]("scalacOptions4Meta")
    val mygenerator = TaskKey[Seq[File]]("mygenerator")
  }

  import autoImport._

  override def trigger = allRequirements

  override lazy val projectSettings = Seq(
    mygenerator := {
      val file = sourceManaged.value / "settings4Meta.scala"
      val opts = (scalacOptions in Compile).value
        .map(opt => "\"" + opt + "\"")
      val content = s"""
        import sbt._
        import Keys._

        object MyBuild extends Build {
          lazy val root = Project("root", file("."))
            .settings(
              MyPlugin.autoImport.scalacOptions4Meta := Seq(${opts.mkString(",")})
            )
        }"""
      IO.write(file, content)
      Seq(file)
    }
  )
}

项目/ plugins.sbt:

addSbtPlugin("myplugin" % "myplugin" % "0.1-SNAPSHOT")

scalacOptions := Seq("-Xfuture")

sourceGenerators in Compile += mygenerator.taskValue

项目/项目/ plugins.sbt:

addSbtPlugin("myplugin" % "myplugin" % "0.1-SNAPSHOT")