在 build.sbt 中过滤 类

Filtering classes in build.sbt

Play enhancer docs 说它可以为特定的 classes/packages 启用。可以这样完成(我假设在 build.sbt 中):

sources in (Compile, playEnhancerGenerateAccessors) := {
  ((javaSource in Compile).value / "models" ** "*.java").get
}

我不习惯sbt/scala,我想知道如何在这种过滤中提供多个包。如果我可以选择带有指定注释的 类 就更好了。可能吗?

编辑: 所以这个问题的动机是提高 Play Framework 项目的编译速度。事实证明,即使我只增强了特定的包,编译速度也基本相同。奇怪的是,完全关闭 PlayEnchancer 后,我的项目的编译时间几乎减少了一半(30 秒)。

范围 sources 设置存储一组用于该 Play Enhancer 任务的文件,此示例仅过滤具有给定模式的文件:

  • (javaSource in Compile).value 应该是你项目中的 src/main/java/ 目录
  • / "models" 表示您只在 src/main/java/models/
  • 中查找
  • ** "*.java" 在所有子目录中搜索任何扩展名为 .java 的文件
  • .get 只评估匹配模式的文件列表

如果您想组合多个模式,可以使用 +++--- 运算符:

sources in (Compile, playEnhancerGenerateAccessors) := {
  val green = base / "green" ** "*.java"
  val blue  = base / "blue" ** "*.java"
  val red   = base / ** "*red*"
  (green +++ blue --- red).get
}

在 sbt 中,这些模式称为 Path Finders,您可以在 Paths 的 sbt 文档中阅读如何使用它们。由于这只是通过 path/name 过滤文件,我认为您不能通过这种方式 select 类 指定注释。