【发布时间】:2016-08-10 08:17:25
【问题描述】:
我有一个看起来像这样的 SBT 版本:
name := "foo"
version := "1.0"
lazy val schemaFile = settingKey[File]("File containing FIX schema for generator")
schemaFile := (resourceDirectory in Compile).value / "input.xml"
sourceGenerators in Compile <+= Def.task {
import my.project.SourceGenerator
lazy val filename : String = schemaFile.value.getName.toLowerCase.stripSuffix(".xml") + ".scala"
lazy val outFile : File = (sourceManaged in Compile).value / filename
outFile.getParentFile.mkdirs()
Seq(SourceGenerator.generate(schemaFile.value,outFile))
}
SourceGenerator.generate() 将输入 *.xml 转换为 *.scala File。
这似乎在单独运行时工作正常。现在,这实际上是一大组项目的子目录,它们之间存在依赖关系。因此,我尝试按照 SBT 指南创建上一级的父 bulid.sbt 文件,并像这样包含这个项目:
// build.sbt in the directory directly above foo's build.sbt
lazy val foo = project
lazy val bar = project dependsOn foo
现在,当我尝试加载此配置时,我收到如下错误:
Project loading failed: (r)etry, (q)uit, (l)ast, or (i)gnore? r
C:\**\rootproj\foo\build.sbt:7: error: type mismatch;
found : java.io.File
required: T
schemaFile := (resourceDirectory in Compile).value / "input.xml"
这里发生了什么?我是否以错误的方式解决这个问题 - 即,将 sbt 构建与父“根”构建相互嵌套不安全吗?
附言在旁注中,有人可以指向 / 运算符和 <+= 的 api 文档
【问题讨论】: