[英]How to get sbt-assembly merge right?
在我们的Scala / Scalatra项目中,我们为插件sbt-assembly
提供了这个合并策略:
assemblyMergeStrategy in assembly := {
case x =>
val oldStrategy = (assemblyMergeStrategy in assembly).value
oldStrategy(x)
}
[error]在合并期间遇到11个错误java.lang.RuntimeException:deduplicate:在下面找到不同的文件内容:〜/ .ivy2 / cache / org.scalatra / scalatra_2.11 / jars / scalatra_2.11-2.3.1。 jar:mime.types~ / .ivy2 / cache / com.amazonaws / aws-java-sdk-s3 / jars / aws-java-sdk-s3-1.10.1.jar:mime.types
重复数据删除:在以下内容中找到不同的文件内容:
〜/ .ivy2 /缓存/公地的BeanUtils /公地的BeanUtils /瓶/公地的BeanUtils-1.8.3.jar:组织/阿帕奇/公/收藏/ ArrayStack.class
〜/ .ivy2 /缓存/公地的集合/公地的集合/瓶/公地集合-3.2.1.jar:组织/阿帕奇/公/收藏/ ArrayStack.class
重复数据删除:在以下内容中找到不同的文件内容:和不同的类名称相同的错误
这里合适的逻辑是什么?
版本:
斯卡拉:2.11.7
SBT:0.13.9
sbt-assembly:0.13.0
我不认为,这是一个“合并策略”的问题,但更多的是你正在使用的libs及其依赖项。
谁“拉”了这些依赖关系? 您具体使用哪些库?
限制的一种方法是使用依赖声明的excludeAll
(和类似)。 (参见SBT中的图书馆管理 ),例如
excludeAll(
ExclusionRule("commons-beanutils", "commons-beanutils-core"),
ExclusionRule("commons-collections", "commons-collections"),
ExclusionRule("commons-logging", "commons-logging"),
ExclusionRule("org.slf4j", "slf4j-log4j12"),
ExclusionRule("org.hamcrest", "hamcrest-core"),
ExclusionRule("junit", "junit"),
ExclusionRule("org.jboss.netty", "netty"),
ExclusionRule("com.esotericsoftware.minlog", "minlog")
)
我原来的问题解决了:
assemblyMergeStrategy in assembly := {
case PathList("org", "apache", "commons", "collections", xs @ _*) =>
MergeStrategy.last
case PathList("mime.types") =>
MergeStrategy.last
case x =>
val oldStrategy = (assemblyMergeStrategy in assembly).value
oldStrategy(x)
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.