Assembly SBT在组装过程中允许重复

Assembly SBT在组装过程中允许重复,assembly,sbt,deduplication,Assembly,Sbt,Deduplication,在此处输入代码有没有办法关闭SBT的程序集插件中的重叠 我一直在清理一个sbt程序集以老式方式构建,使用sbt依赖关系图删除同一文件具有不同版本的jar文件 如果我只是将last用于该策略,那么在运行makeJar时,生成的jar文件将失败,并出现一个重复条目 如果我在策略中使用discard,那么生成的jar文件很简单,没有任何内容 然而,在我的例子中,这并不是一个大问题:我想简单地避免完全重复,如果在运行时出现问题,可以稍后清理依赖冲突。这通常是像maven这样的工具的工作方式,我想使用

在此处输入代码
有没有办法关闭SBT的
程序集
插件中的重叠

我一直在清理一个
sbt程序集
以老式方式构建,使用
sbt依赖关系图
删除同一文件具有不同版本的jar文件

  • 如果我只是将last用于该策略,那么在运行makeJar时,生成的jar文件将失败,并出现一个重复条目
  • 如果我在策略中使用discard,那么生成的jar文件很简单,没有任何内容

然而,在我的例子中,这并不是一个大问题:我想简单地避免完全重复,如果在运行时出现问题,可以稍后清理依赖冲突。这通常是像maven这样的工具的工作方式,我想使用SBT来构建类似于由这些工具构建的胖jar的jar。

我能够想出一个合理的合并策略,它看起来像是这样,取自


原始问题的答案很简单,当使用sbt assembly时,您必须定义一个合并策略,并且有很多模板(如此模板)可以借用并粘贴到build.sbt文件中。

注意:我已经成功找到了一种方法,通过在assembly中使用
合并策略:={MergeStrategy.discard…
在by build.sbt文件中。不确定这是否是一个好的解决方案。
mergeStrategy in assembly := { 
  case n if n.startsWith("META-INF/eclipse.inf") => MergeStrategy.discard
  case n if n.startsWith("META-INF/ECLIPSEF.RSA") => MergeStrategy.discard
  case n if n.startsWith("META-INF/ECLIPSE_.RSA") => MergeStrategy.discard
  case n if n.startsWith("META-INF/ECLIPSEF.SF") => MergeStrategy.discard
  case n if n.startsWith("META-INF/ECLIPSE_.SF") => MergeStrategy.discard
  case n if n.startsWith("META-INF/MANIFEST.MF") => MergeStrategy.discard
  case n if n.startsWith("META-INF/NOTICE.txt") => MergeStrategy.discard
      case n if n.startsWith("META-INF/NOTICE") => MergeStrategy.discard
      case n if n.startsWith("META-INF/LICENSE.txt") =>     
 MergeStrategy.discard
      case n if n.startsWith("META-INF/LICENSE") => MergeStrategy.discard
      case n if n.startsWith("rootdoc.txt") => MergeStrategy.discard
      case n if n.startsWith("readme.html") => MergeStrategy.discard
      case n if n.startsWith("readme.txt") => MergeStrategy.discard
      case n if n.startsWith("library.properties") => MergeStrategy.discard
      case n if n.startsWith("license.html") => MergeStrategy.discard
      case n if n.startsWith("about.html") => MergeStrategy.discard
      case _ => MergeStrategy.deduplicate
    }