【问题标题】:Filtering resources in SBT在 SBT 中过滤资源
【发布时间】:2011-10-01 10:09:25
【问题描述】:

我正在尝试设置 SBT 来编译不使用 maven 目录结构的现有项目。我正在使用full configuration 并设置了我的 javaSource 和 resourceDirectory 设置如下:

def settings = Defaults.defaultSettings ++ Seq(
    resourceDirectory in Compile <<= baseDirectory( _ / "java" ),
    javaSource in Compile <<= baseDirectory( _ / "java" )
)

现在我希望能够过滤我们包含在 jar 工件中的资源,就像我们目前对 ant 所做的那样,加上排除 .java 文件,因为我们的资源与源代码混合在一起。例如:

<fileset dir="java" includes="**/*.txt, **/*.csv" excludes="**/*.java" />

有什么办法吗?

【问题讨论】:

  • 只是给关注这个问题的人的一个通知,这是 SBT 0.10。
  • 值得创建一个 sbt10 标签吗?和 sbt07 太不一样了……
  • 一个子通知 - defaultExcludes 在 sbt 0.11 中被 excludeFilter 弃用

标签: scala sbt


【解决方案1】:

使用defaultExcludes 范围内的unmanagedResources 任务和可选的配置。例如,此设置从主要资源中排除 .java 文件:

defaultExcludes in Compile in unmanagedResources := "*.java"

in Compile 将此设置限制为仅适用于主要资源。通过改用in Test,它将仅适用于测试资源。通过省略配置(即没有in Compilein Test),该设置将适用于主资源和测试资源。

in unmanagedResources 仅将这些排除项应用于资源。例如,要将排除项应用于源,范围将是 in unmanagedSources。非托管部分的原因是强调这些仅适用于非托管(或手动编辑)的源。

defaultExcludes 键的类型为 sbt.FileFilter,因此设置值必须为该类型。在上面的示例中,"*.java" 被隐式转换为 FileFilter。 * 被解释为通配符,因此过滤器接受名称以“.java”结尾的文件。要组合过滤器,请使用 ||&amp;&amp;。例如,如果还需要排除 .scala 文件,:= 的参数将是:

"*.java" || "*.scala"

在原始 Ant 文件集中,包含和排除过滤器选择互斥的文件集,因此只需要一个。

也可以直接为unmanagedResources构建Seq[File]。例如:

unmanagedResources in Compile <<=
  unmanagedResourceDirectories in Compile map { (dirs: Seq[File]) =>
    ( dirs ** ("*.txt" || "*.csv" -- "*.java") ).get
  }

** 方法选择与 FileFilter 参数匹配的所有后代。您可以通过运行show unmanaged-resources 来验证文件是否按照您的预期选择。

【讨论】:

  • 如果我想排除 .java 文件,这可以工作,我可以只包含一个特定的文件集吗?我想如果可能的话,否定sbt.FileFilter 会起作用。
  • 没有互补的includes 设置或任何东西。 sourceFilter 用于源,classpathFilter 用于类路径,但没有资源。将这些统一在includes in unmanagedResources 之类的东西下会很有用,因此您可能会为此使用open a bug。否定FileFilter 是可能的,但在这里无济于事。
  • 我编辑了答案以包括如何直接构建资源设置。
【解决方案2】:

对于 sbt 1.48,我需要这种风格:

.settings(
  Compile / sources := Seq(file("/path/to/your/file"))
)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-16
    • 2011-02-15
    • 1970-01-01
    • 2016-04-04
    • 2021-12-15
    • 2017-12-31
    • 2013-04-11
    • 2019-06-16
    相关资源
    最近更新 更多