首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在sbt中手动调用sourceGenerators

在sbt中手动调用sourceGenerators
EN

Stack Overflow用户
提问于 2014-04-04 10:13:06
回答 1查看 1.7K关注 0票数 6

我正在使用sourceGenerators in Compile生成一些Scala源文件,用于目标\Scala-2.10\src_managed。当我运行sbt compile时,源将与src\main\scala下的常规代码一起生成和编译。

但是,如果我想在不编译的情况下单独生成源呢?我要找的是这个流程:

  1. 调用任务生成源代码
  2. 在我的常规源中使用生成的IDE辅助源
  3. 编译所有的东西

如何才能做到这一点?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-07 11:17:26

更新

如果我现在让你正确,你想要能够单独调用源生成器。为此,您只需在/build.sbt/project/Project.scala文件中的某个地方定义这样的自定义任务:

代码语言:javascript
运行
复制
val generateSources = taskKey[List[File]]("generate sources")

generateSources <<= 
  (sourceGenerators in Compile) { _.join.map(_.flatten.toList) }

然后,您可以从sbt控制台手动调用生成器,如下所示:

代码语言:javascript
运行
复制
> generateSources
[success] Total time: 0 s, completed 07.04.2014 13:42:41

附带注意:不过,如果您需要IDE的唯一目的是获得IDE支持,那么我建议设置您的IDE来生成源代码。

旧答案供将来参考

您不需要做任何特殊的事情来使用非生成类或对象生成的类或对象。

/build.sbt/project/Project.scala文件中定义源生成器:

代码语言:javascript
运行
复制
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类的实例

代码语言:javascript
运行
复制
object B extends App {
  val a = new A("It works")
  println(a.name)
}

如果您从sbt编译此代码,它将在编译时同时考虑生成代码和非生成代码:

代码语言:javascript
运行
复制
> run
[info] Compiling 2 scala sources to <...>
[info] Running B
It works
[success] Total time: 0 s, completed 07.04.2014 13:15:47
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22859879

复制
相关文章

相似问题

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