我在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目录下播源。
答案 0 :(得分:2)
“我认为将它们放在target / src_managed / main目录下是可以的,但是没有用。”
嗯,这是行不通的,因为顾名思义,它们是SBT的来源 管理-这意味着SBT必须了解它们并具有生成它们。
因此,您有两个选择:
将其设为不受管理的来源
从根本上讲,这意味着让您的脚本在src/main/scala/some/package/GeneratedFile.scala
中创建源代码-这是最简单的解决方案,但它也有其自身的问题。
配置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"