我sourceGenerators in Compile用来生成一些Scala源文件来定位\ scala-2.10\src_managed.当我运行时sbt compile,源代码与src\main\scala下的常规代码一起生成和编译.
但是,如果我想在不编译的情况下单独生成源代码呢?我正在寻找的是这个流程:
如何实现这一目标?
更新
如果我现在猜对了,您希望能够单独调用源生成器。为此,您可以简单地在您的文件中的某个位置定义一个这样的自定义/build.sbt任务/project/Project.scala:
val generateSources = taskKey[List[File]]("generate sources")
generateSources <<=
(sourceGenerators in Compile) { _.join.map(_.flatten.toList) }
Run Code Online (Sandbox Code Playgroud)
然后您可以从 sbt 控制台手动调用生成器,如下所示:
> generateSources
[success] Total time: 0 s, completed 07.04.2014 13:42:41
Run Code Online (Sandbox Code Playgroud)
旁注: 不过,如果您唯一需要的就是获得 IDE 支持,我建议您设置 IDE 来生成源代码。
旧答案供将来参考
您不需要执行任何特殊操作即可使用来自非生成的类或对象的生成的类或对象。
在您的/build.sbt或/project/Project.scala文件中定义源生成器:
sourceGenerators in Compile <+= sourceManaged in Compile map { dir =>
val file = dir / "A.scala"
IO.write(file, "class A(val name: String)")
Seq(file)
}
Run Code Online (Sandbox Code Playgroud)
然后编写一些代码来创建类 A 的实例/src/main/scala/B.scala:
object B extends App {
val a = new A("It works")
println(a.name)
}
Run Code Online (Sandbox Code Playgroud)
如果您从 sbt 编译此代码,它将在编译时考虑生成的代码和非生成的代码:
> run
[info] Compiling 2 scala sources to <...>
[info] Running B
It works
[success] Total time: 0 s, completed 07.04.2014 13:15:47
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1351 次 |
| 最近记录: |