在sbt组装期间过滤掉不必要的本机依赖项

在sbt组装期间过滤掉不必要的本机依赖项,sbt,sbt-assembly,Sbt,Sbt Assembly,我们使用sbt汇编将依赖jar合并到单个jar文件中 我们的一个依赖项包含Windows、OSX和Linux的本机非托管依赖项。我们将只在Linux上发布。我们不需要的本机依赖项显著增加了jar的大小。该库仅作为具有所有操作系统依赖项的单个jar提供,而不是作为不同本机二进制文件的单独jar提供 在sbt组装过程中,我有没有办法过滤掉这些 编辑 我不想排除整个罐子。我们所依赖的一个jar文件包含Windows、OSX和Linux的本机二进制文件。我们需要jar文件,我们需要Linux二进制文件。

我们使用sbt汇编将依赖jar合并到单个jar文件中

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

在sbt组装过程中,我有没有办法过滤掉这些

编辑
我不想排除整个罐子。我们所依赖的一个jar文件包含Windows、OSX和Linux的本机二进制文件。我们需要jar文件,我们需要Linux二进制文件。我们不需要Windows或OSX二进制文件。它们将最终单个jar文件的大小增加了一倍。

我们正在对合并的jar中的各种其他元素使用assemblyMergeStrategy“discard”,这可以在一定程度上减小大小。依赖jar的“lib”文件夹的内容似乎没有在该合并中处理,因此被丢弃。

使用assemblyMergeStrategy删除本机依赖项。
这最初不起作用的原因是我试图在模式中使用路径。如果要使用路径,请使用
路径列表()


你是对的。排除类的最佳方法是使用。以前有一个
excludedfilesinassembly
选项,但现在不再支持该选项。
assemblyMergeStrategy in assembly := {
    case PathList("lib", "static", "Windows", xs @ _*) => MergeStrategy.discard
    case PathList("lib", "static", "Mac OS X", xs @ _*) => MergeStrategy.discard
    ...  
    case _ => MergeStrategy.first
}