繁体   English   中英

如何让sbt-assembly合并?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM