过滤build.sbt中的类

时间:2018-07-15 13:34:03

标签: scala playframework sbt

Play enhancer docs说可以为特定的类/包启用它。可以通过以下方式完成(我在build.sbt中假设):

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

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

编辑: 因此,出于提高Play Framework项目的编译速度的意图而提出了这个问题。事实证明,即使仅增强特定的软件包,编译速度也基本相同。奇怪的是,完全关闭PlayEnchancer可以使我的项目的编译时间几乎减少一半(30秒)。

1 个答案:

答案 0 :(得分:1)

范围为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中,这些模式称为路径查找器,您可以在Paths的sbt文档中了解如何使用它们。因为这只是按文件的路径/名称过滤文件,所以我认为您不能以这种方式选择带有指定注释的类。