src_managed中的源文件不属于SBT中项目源的一部分

时间:2018-11-25 11:01:26

标签: scala sbt

我在SBT方面不是很熟练,可能是我错过了某事

我有bash脚本,可以生成一些scala源。我想在我的sbt项目中使用它们。我以为可以将它们放在target/src_managed/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_managed应该可用,不是吗?

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_managed目录下播源。

2 个答案:

答案 0 :(得分:2)

  

“我认为将它们放在target / src_managed / main目录下是可以的,但是没有用。”

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

  1. 将其设为不受管理的来源
     从根本上讲,这意味着让您的脚本在src/main/scala/some/package/GeneratedFile.scala中创建源代码-这是最简单的解决方案,但它也有其自身的问题。

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

答案 1 :(得分:0)

我想我找到了答案,现在可以了:

unmanagedSourceDirectories in Compile += baseDirectory.value.getParentFile.getParentFile / "protos" / "generated" / "scala"