gpt4 book ai didi

scala - 在 sbt 中手动调用 sourceGenerators

转载 作者:行者123 更新时间:2023-12-04 15:34:14 27 4
gpt4 key购买 nike

我正在使用 sourceGenerators in Compile生成一些 Scala 源文件到 target\scala-2.10\src_managed。当我跑 sbt compile源代码与 src\main\scala 下的常规代码一起生成和编译。

但是如果我想单独生成源而不编译怎么办?我正在寻找的是这个流程:

  • 调用任务生成源码
  • 在我的常规资源中使用生成的 IDE 帮助源
  • 编译一切

  • 如何做到这一点?

    最佳答案

    更新

    如果我现在猜对了,您希望能够单独调用源生成器。为此,您可以简单地在 /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 以生成源。

    旧答案以供将来引用

    您无需执行任何特殊操作即可使用来自非生成类或对象的生成类或对象。

    在您的 /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:47

    关于scala - 在 sbt 中手动调用 sourceGenerators,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22859879/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com