在 sbt-assembly 期间过滤掉不必要的原生依赖

filter out unnecessary native dependencies during sbt-assembly

我们正在使用 sbt-assembly 将依赖的 jar 合并到一个 jar 文件中。

我们的一个依赖项包含 Windows、OSX 和 Linux 的本机非托管依赖项。我们只会在 Linux 分发。我们不需要的本机依赖项显着增加了我们的 jar 的大小。该库仅作为具有所有 OS 依赖项的单个 jar 提供,而不是作为不同本机二进制文件的单独 jar。

我有办法在 sbt-assembly 期间过滤掉这些吗?

编辑
我并不是要排除整个罐子。我们依赖的 jar 文件之一包含 Windows、OSX 和 Linux 的本机二进制文件。我们需要 jar 文件,我们需要 Linux 二进制文件。我们不需要 Windows 或 OSX 二进制文件。他们将最终单个 jar 文件的大小加倍。
我们正在对合并的 jar 中的各种其他元素使用 "discard" 的 assemblyMergeStrategy,这可以稍微减小大小。依赖 jar 的 "lib" 文件夹的内容似乎没有在该合并中被处理并被丢弃。

已使用 assemblyMergeStrategy 删除本机依赖项。
这最初不起作用的原因是因为我试图在模式中使用路径。如果要使用路径,请使用 PathList()(如此处记录 https://github.com/sbt/sbt-assembly#merge-strategy

assemblyMergeStrategy in assembly := {
    case PathList("lib", "static", "Windows", xs @ _*) => MergeStrategy.discard
    case PathList("lib", "static", "Mac OS X", xs @ _*) => MergeStrategy.discard
    ...  
    case _ => MergeStrategy.first
}