首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在sbt插件中生成源?

如何在sbt插件中生成源?
EN

Stack Overflow用户
提问于 2014-07-13 15:42:10
回答 1查看 2.7K关注 0票数 16

我正在尝试生成一些来源,如生成文件中所描述的。

当我将以下内容放入我的build.sbt中时,一切都正常:

代码语言:javascript
复制
sourceGenerators in Compile += Def.task {
  val file = (sourceManaged in Compile).value / "demo" / "Test.scala"
  IO.write(file, """object Test extends App { println("Hi") }""")
  Seq(file)
}.taskValue

但是,当我试图在插件中做同样的事情时,任务从未运行过:

代码语言:javascript
复制
object MyPlugin extends AutoPlugin {
  override lazy val projectSettings = Seq(
    sourceGenerators in Compile += Def.task {
      val file = (sourceManaged in Compile).value / "demo" / "Test.scala"
      IO.write(file, """object Test extends App { println("Hi") }""")
      Seq(file)
    }.taskValue
  )
}

我放在插件中的其他东西似乎都很好,但是源文件从来没有生成过。

我错过了什么重要的事情吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-13 16:18:28

您必须在JvmPlugin之后加载插件,该插件在projectSettings中重置sourceGenerators (参见sbt.Defaults.sourceConfigPaths)。

您可以通过将它添加到插件中作为一个需求来实现。

代码语言:javascript
复制
override def requires = JvmPlugin

完整的示例如下所示:

代码语言:javascript
复制
import sbt._
import Keys._
import plugins._

object MyPlugin extends AutoPlugin {
  override def requires = JvmPlugin
  override lazy val projectSettings = Seq(
    sourceGenerators in Compile += Def.task {
      val file = (sourceManaged in Compile).value / "demo" / "Test.scala"
      IO.write(file, """object Test extends App { println("Hi") }""")
      Seq(file)
    }.taskValue
  )
}
票数 24
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24724406

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档