在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?
有些关联答案 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")