【发布时间】:2011-12-01 09:35:37
【问题描述】:
根据可用的 sbt 0.11.0 文档("Common Tasks" wiki page 和其他人)以及在 Scalaz SBT build 和 Scalate SBT build 中看到这是如何完成的,我无法弄清楚为什么我的简单示例不起作用:
import sbt._
import Keys._
object MyBuild extends Build {
lazy val project = Project(
id = "root",
base = file("."),
settings = Defaults.defaultSettings ++ Seq(
(sourceGenerators in Compile) <+= (sourceManaged in Compile) map { dir =>
val file = dir / "bla.scala"
IO.write(file, """object Bla extends App { println("bla!") }""")
Seq(file)
}
)
)
}
将它放在一个空项目的 project/build.scala 上并运行“sbt compile”不会生成/编译任何内容,“sbt run”会抱怨它找不到任何主类。
现在,如果我将设置放在“快速配置”build.sbt 中,而不是上面的完整配置,它就可以工作。
(sourceGenerators in Compile) <+= (sourceManaged in Compile) map { dir =>
val file = dir / "bla.scala"
IO.write(file, """object Bla extends App { println("bla!") }""")
Seq(file)
}
显然,需要在“完整配置”项目中创建 build.sbt 文件是不可取的,至少对我来说是这样。
那么,为什么这个设置在完整配置中不起作用?
【问题讨论】:
-
我将上面的内容复制并粘贴到 project/Build.scala 中,运行“sbt run”,它打印了 bla!正如预期的那样。或许可以通过在对象中添加 println 或更改设置并验证它是否生效来检查文件名是否正确以及定义是否正在加载。
-
project/build.scala在project/Build.scala成功的地方失败了吗? -
这个人值得一票否决,因为他的答案一年不被接受。让我成为第一个 :)
标签: scala code-generation sbt