在 build.sbt 中过滤类
Posted
技术标签:
【中文标题】在 build.sbt 中过滤类【英文标题】:Filtering classes in build.sbt 【发布时间】:2018-07-15 13:34:02 【问题描述】:Play enhancer docs 表示可以为特定的类/包启用它。可以通过这种方式完成(我假设在 build.sbt 中):
sources in (Compile, playEnhancerGenerateAccessors) :=
((javaSource in Compile).value / "models" ** "*.java").get
我不习惯 sbt/scala,我想知道如何在这样的过滤中提供多个包。如果我可以选择具有指定注释的类,那就更好了。是否可以?
编辑: 所以这个问题的动机是为了提高 Play Framework 项目的编译速度。事实证明,即使我只增强特定包,编译速度也基本相同。这很奇怪,因为完全关闭 PlayEnchancer,我的项目的编译时间几乎减少了一半(30 秒)。
【问题讨论】:
【参考方案1】:作用域sources
设置为该播放增强器任务存储一组文件,此示例仅过滤具有给定模式的文件:
(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,您可以在 sbt 文档中了解如何使用它们 Paths。由于这只是通过路径/名称过滤文件,我认为您不能以这种方式选择具有指定注释的类。
【讨论】:
以上是关于在 build.sbt 中过滤类的主要内容,如果未能解决你的问题,请参考以下文章
在 build.sbt 和 project/plugins.sbt 中避免冗余/重用 ModuleID?
如何在 sbt 子项目 build.sbt 文件中获取对当前项目的引用
在 build.sbt 中使用 Jenkins 内部版本号通过 sbt-native-packager 构建 RPM