我对 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 必须了解它们并有能力生成它们。
因此,您有两个选择:
将其设置为非托管来源
这基本上意味着让您的脚本在 src/main/scala/some/package/GenerateFile.scala 中创建源代码 - 这是最简单的解决方案,但它有自己的问题。- 生成的文件成为代码存储库的一部分 - 但由于它们是生成的,因此它们本身不打算被修改。
- 您需要确保在每个打包/发布/部署之前运行脚本。
配置 SBT 以从您的脚本创建托管源
您可以看看sbt documentation关于源生成器 - 和 documentation有关运行外部进程的信息,以获取在 SBT 内运行 bash 脚本的帮助。
您基本上必须创建一个创建文件的 SBT 任务 - 这在一开始可能会比较困难,但它的优点是 sbt 会在每次需要时负责生成源。
你可能会发现这个simple demo我几个月前做了一个创建您自己的生成器的引用 - 导入代码位于build.sbt
文件中。
对于更适合生产的生成器版本,包括适当的位置、依赖项隔离和测试,您可以查看 this .
关于scala - src_managed 中的源文件不是 SBT 中项目源的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53466799/