gpt4 book ai didi

scala - SBT:排除资源子目录

转载 作者:行者123 更新时间:2023-12-01 09:53:31 25 4
gpt4 key购买 nike

我的大部分 Scala 项目都在使用 Gradle,但我想评估 SBT 作为替代品的适用性。我在 Gradle 中所做的一件事是从最终构建中排除某个资源目录(例如,使用 CoffeeScript 编写将作为最终资源包含在内的 JavaScript 文件)。

在 Gradle 中,我会这样做:

sourceSets {
main {
resources {
exclude 'com/example/export/dev' // exclude development resources
}
}
}

这将排除资源包 com.example.export.dev来自最终构建的包。

我将如何在 SBT 中做同样的事情?我试过了
unmanagedResourceDirectories in Compile -= (resourceDirectory in Compile).value / "com/example/export/dev"

但这没有任何作用(我明白为什么,但这并没有真正的帮助)。 SBT 网站上的文档仅讨论排除文件模式(在 Classpaths, sources, and resources 处)。

作为更具描述性的图像,假设我们有以下资源目录结构:
com
\---example
\---export
\---dev
\---something

在最终输出中,我想要:
com
\---example
\---export
\---something

最佳答案

SBT 的思维方式有点不同,我知道一开始可能很难。

在您的示例中,您需要修改生成资源文件的任务(或选择文件夹以查找资源文件的任务)。

这是我如何仅选择以字符“a”开头的资源文件的示例。

(unmanagedResources in Compile) := (unmanagedResources in Compile).value.filter(_.getName.startsWith("a"))

同样,如果你想修改资源文件的整个目录,你可以这样做:
(unmanagedResourceDirectories in Compile) := (unmanagedResourceDirectories in Compile).value.filter(_.getName.startsWith("a"))

显然,我这里的过滤器只是一个例子,您可以使用 Scala 支持的任何复杂模式。

SBT 的好处在于它是交互式的。因此,您只需在项目的 REPL 中键入以下内容即可检查任务的结果:
> show compile:unmanagedResources
> show compile: unmanagedResourceDirectories

要检查任务的所有依赖项,请从 REPL 执行此操作:
> inspect tree compile:unmanagedResources

假设:

SBT 使用标准 maven build directory layout 知道在哪里可以找到所有资源.上述解决方案假设所有资源都在 /resources 下目录。然后,您可以使用 getClass.getResource("/folderInsideResources/file.txt") 从您的 Scala 代码访问它们。 .

以下是具有资源的混合 Java/Scala 项目的示例目录布局:
 .
├── main
│   ├── java
│   │   └── com
│   │   └── a
│   │   └── b
│   │   └── Hello.java
│   ├── resources
│   │   ├── a.tx
│   │   └── b.tx
│   └── scala
│   └── com
│   └── a
│   └── b
│   └── ScalaHello.scala
└── test
├── resources
└── scala
└── com
└── a
└── b
└── ScalaHello.scala

要访问资源文件,只需使用:
 getClass.getResource("/a.txt")
getClass.getResource("/b.txt")

关于scala - SBT:排除资源子目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33318321/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com