我正在使用sourceGenerators in Compile生成一些Scala源文件,用于目标\Scala-2.10\src_managed。当我运行sbt compile时,源将与src\main\scala下的常规代码一起生成和编译。
但是,如果我想在不编译的情况下单独生成源呢?我要找的是这个流程:
如何才能做到这一点?
发布于 2014-04-07 11:17:26
更新
如果我现在让你正确,你想要能够单独调用源生成器。为此,您只需在/build.sbt或/project/Project.scala文件中的某个地方定义这样的自定义任务:
val generateSources = taskKey[List[File]]("generate sources")
generateSources <<=
(sourceGenerators in Compile) { _.join.map(_.flatten.toList) }然后,您可以从sbt控制台手动调用生成器,如下所示:
> generateSources
[success] Total time: 0 s, completed 07.04.2014 13:42:41附带注意:不过,如果您需要IDE的唯一目的是获得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)
}然后编写一些代码,在/src/main/scala/B.scala中创建A类的实例
object B extends App {
val a = new A("It works")
println(a.name)
}如果您从sbt编译此代码,它将在编译时同时考虑生成代码和非生成代码:
> run
[info] Compiling 2 scala sources to <...>
[info] Running B
It works
[success] Total time: 0 s, completed 07.04.2014 13:15:47https://stackoverflow.com/questions/22859879
复制相似问题