java - SBT - 有没有办法忽略 copyResources 中的重复映射?

标签 java scala sbt sbt-assembly

我正在尝试使用 SBT 和 sbt-assembly 生成一个 fat jar。作为一项要求,我需要在 jar 中添加其他非托管资源(目录)。问题是 2 个目录中的文件具有相同的文件名和路径。因此运行 assembly 会导致 copyResources 错误 - 重复映射错误。我想要的行为是如果文件已经存在,则丢弃另一个文件。有没有办法做到这一点?这行得通吗?

unmanagedResources in Compile ~= (_.distinct)

这是一个解决方案吗?有更好的解决方案吗?

最佳答案

可能是程序集插件的 merge strategy settings对你来说足够了。试试这个:

mergeStrategy in assembly <<= (mergeStrategy in assembly) { (old) => {
  case PathList("path", "to", "file", xs @ _*) =>
    (xs map {_.toLowerCase}) match {
      case ("myduplicatefile" :: Nil) => MergeStrategy.first
      case _ => MergeStrategy.deduplicate
    }
  case x => old(x)
}

关于java - SBT - 有没有办法忽略 copyResources 中的重复映射?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24037395/

相关文章:

scala - 在 Maven 生成的包中包含 scala-library.jar

scala - 从 Spark DataFrame 中的单个列派生多个列

scala - 这两个 curry 函数实现是否相等?

scala - 做 sbt ! : output to file

SBT 的 Java 代码格式化程序

java - 将 Spring MVC 重定向从 GET 更改为 POST?

java - 客户端和服务器之间的通信出现一些故障

java - 枚举实现接口(interface)、接口(interface)和方法可见性

scala - SBT src_management 不可用于编译

java - 如何使用键盘调整 IntelliJ IDEA 中的工具窗口大小?