scala - 如何正确过滤 sbt 源生成器文件进行编译?
问题描述
我正在使用外部库作为 Scala 源生成器。该库在提供的路径中吐出 .scala 文件和资源。
如果我只是将库改编为Task[Seq[File]]
:
Compile / sourceGenerators += Def.task {
SomeCodeGenLib.genCode(
(Compile / resourceDirectory).value / "schema.yaml",
(Compile / sourceManaged).value
)
}.taskValue,
...资源文件被视为 Scala 源并传递给编译失败的 scalac。
所以我只是尝试添加 includeFilter 或 excludeFilter,但这些似乎只适用于 unmanagedSource,而不是托管:
// These settings does not work:
managedSources / includeFilter := "*.scala" || "*.java",
sbt 还抱怨其他人没有使用这些设置键:
[warn] there are 2 keys that are not used by any other settings/tasks:
[warn]
[warn] * api / managedSources / excludeFilter
[warn] +- /Users/viktor/dev/…… / build.sbt:192
[warn] * api / managedSources / includeFilter
[warn] +- /Users/viktor/dev/…… / build.sbt:193
所以下一个想法是过滤任务中的文件:
Compile / sourceGenerators += Def.task {
val generatedFiles = SomeCodeGenLib.genCode(
(Compile / resourceDirectory).value / "schema.yaml",
(Compile / sourceManaged).value
)
generatedFiles.filter(f => f.getName().endsWith(".scala"))
}.taskValue
......这是我似乎到达任何地方的唯一方法。但这真的是正确的方法吗?
解决方案
推荐阅读
- c++ - 将OpenGL坐标系统转换为自定义并返回
- php - PHP-FPM 剖析
- parsing - 如何解释子句的tregex
- java - 通过按钮触发的 SSH 隧道远程执行命令
- oauth-2.0 - Nodemailer OAUTH Gmail 连接(错误:连接 ETIMEDOUT 74.125.140.108:465)
- excel - VBA Excel 宏.复制和粘贴目标错误 1004
- mysql - 如何使用连接查询从 MySQL 中检索数据
- django - 历史模式下子页面上带有 Vue 的 Django
- python - 如何使用 groupby 和 .loc 顺序过滤数据帧
- javascript - 如何通过某些规则从 redux 状态中删除某些项目