enter code here
有没有办法在 SBT的 assembly
插件中关闭重复?
我一直在清理sbt assembly
以旧式方式构建,使用sbt dependency-graph
删除具有相同文件的不同版本的jar文件。
但是,在我的情况下,这不是一个大问题:我想完全避免重复复制,如果我遇到问题,稍后在运行时,清除依赖冲突。这通常是像 maven 这样的工具如何工作,我想使用SBT来构建类似于这些工具构建的胖罐的罐子。
答案 0 :(得分:0)
我能够提出一个合理的合并策略,看起来像这样,取自https://github.com/moser/foxtrot_mike_client/blob/master/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
}
原始问题的答案很简单,你必须在使用sbt程序集时定义MergeStrategy,并且有很多模板(比如这个)可以借用并粘贴到 build.sbt中文件。