scala - src_managed 中的源文件不是 SBT 中项目源的一部分

标签 scala sbt

我对 SBT 不是很熟练,可能是我缺少一些东西

我有 bash 脚本,可以生成一些 scala 源代码。我想在我的 sbt 项目中使用它们。我认为将它们放在 target/src_management/main 目录下可以,但事实并非如此

在 sbt shell 中,我输入 sourceDirectories

sbt:root> model/sourceDirectories
[info] * /media/alex/kondaurov_hd/back/model/src/main/scala-2.12
[info] * /media/alex/kondaurov_hd/back/model/src/main/scala
[info] * /media/alex/kondaurov_hd/back/model/src/main/java
[info] * /media/alex/kondaurov_hd/back/model/target/scala-2.12/src_managed/main

src_management 应该可用,不是吗?

sbt:root> show model/sources
[info] * /media/alex/kondaurov_hd/back/model/src/main/scala/model/ModelUtils.scala
[info] * /media/alex/kondaurov_hd/back/model/src/main/scala/model/implicits/Response.scala
[success] Total time: 1 s, completed Nov 25, 2018 1:44:02 PM

我不在 src_management 目录下播种源。

最佳答案

"I thought that putting them under target/src_managed/main directory would work, but it doesn't".

嗯,这是行不通的,因为顾名思义,它们是由 SBT 管理来源 - 这意味着 SBT 必须了解它们并有能力生成它们。
因此,您有两个选择:

  1. 将其设置为非托管来源
    这基本上意味着让您的脚本在 src/main/scala/some/package/GenerateFile.scala 中创建源代码 - 这是最简单的解决方案,但它有自己的问题。

    • 生成的文件成为代码存储库的一部分 - 但由于它们是生成的,因此它们本身不打算被修改。
    • 您需要确保在每个打包/发布/部署之前运行脚本。
  2. 配置 SBT 以从您的脚本创建托管源
    您可以看看sbt documentation关于源生成器 - 和 documentation有关运行外部进程的信息,以获取在 SBT 内运行 bash 脚本的帮助。
    您基本上必须创建一个创建文件的 SBT 任务 - 这在一开始可能会比较困难,但它的优点是 sbt 会在每次需要时负责生成源。
    你可能会发现这个simple demo我几个月前做了一个创建您自己的生成器的引用 - 导入代码位于 build.sbt 文件中。
    对于更适合生产的生成器版本,包括适当的位置、依赖项隔离和测试,您可以查看 this .

关于scala - src_managed 中的源文件不是 SBT 中项目源的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53466799/

相关文章:

scala - val a : Set[Fruit]=Set[Apple]() does not compile, 为什么?如何修复?

scala - 为什么在 sbt 1.0.x 中使用 "sbt run"运行 Spark 应用程序会失败?

sbt - 在哪里放置资源,例如图像,scaladoc 可以使用吗?

scala - SBT:修复库依赖项的逐出警告是否明智

scala - 构建 Scala 包依赖图

sbt - 如何从命令行更改日志级别?

scala - Scala 是否支持类型构造函数的部分应用?

Scala 类型证据

scala - 大型数据集 i sqlcontext 上的选择查询失败

scala - 如何从 build.sbt 文件中获取设置值